2012-06-28 9 views
5

私はSBT 0.11を使用します。プロジェクトのソースファイルをsbt 0.11のカスタムタスクで取得する

私はSBTプロジェクトで、次のbuild.sbtファイルました:それは正常に動作しますが、どのように私は、例えば、すべてのJava/Scalaのソースファイルのパスなどの設定にアクセスすることができ

myAction := { 
    // val srcFiles = ? 
    // How can I make srcFiles a List[File] of all sources files? 
    println("This is my action") 
} 

src/main/scala/*.scalaと、ターゲットクラスディレクトリ、例えば。 target/scala-2.9.1/class?

答えて

7

taskKeyを定義し、ところで

yourActionTask <<= (baseDirectory, target, packageBin in Compile, resources in Compile...) map { (basedir, targetDir, bin, res...)=> 
    // use these resources to complete your task as per your needs 
} 

その後、

yourActionTask

を言います。 Keys.scalaソースコードまたはsbtのscaladocで、あらかじめ定義されたタスク/キーを見つけることができます。 (私は将来的にTaskKeyを再利用します気にしないので、ちょうど一緒にTaskKeyとタスクの定義を組み合わせて)ここに

は、あなたが私のビルドファイルのいずれかから抽出されるためにどの参照することができます例です。

val distTask = TaskKey[Unit]("dist", "distribute the deployment package of eromanga") <<= (baseDirectory, target, fullClasspath in Compile, packageBin in Compile, resources in Compile, streams) map { 
(baseDir, targetDir, cp, jar, res, s) => 
    s.log.info("[dist] prepare distribution folders...") 
    val assemblyDir = targetDir/"dist" 
    val confDir = assemblyDir/"conf" 
    val libDir = assemblyDir/"lib" 
    val binDir = assemblyDir/"bin" 
    Array(assemblyDir, confDir, libDir, binDir).foreach(IO.createDirectory) 

    s.log.info("[dist] copy jar artifact to lib...") 
    IO.copyFile(jar, libDir/jar.name) 

    s.log.info("[dist] copy 3rd party dependencies to lib...") 
    cp.files.foreach(f => if (f.isFile) IO.copyFile(f, libDir/f.name)) 

    s.log.info("[dist] copy shell scripts to bin...") 
    ((baseDir/"bin") ** "*.sh").get.foreach(f => IO.copyFile(f, binDir/f.name)) 

    s.log.info("[dist] copy configuration templates to conf...") 
    ((baseDir/"conf") * "*.xml").get.foreach(f => IO.copyFile(f, confDir/f.name)) 

    s.log.info("[dist] copy examples chanenl deployment...") 
    IO.copyDirectory(baseDir/"examples", assemblyDir/"examples") 

    res.filter(_.name.startsWith("logback")).foreach(f => IO.copyFile(f, assemblyDir/f.name)) 
    } 
+0

ありがとうございます!それは魅力のように働く。 :) –

+0

私はそれを取得しません。引数のどれがScalaのソースのリストですか? – pathikrit