2012-06-28 2 views
5

Я использую SBT 0.11.Получение исходных файлов проекта в пользовательской задаче в sbt 0.11

Я следующий build.sbt файл в проекте SBT:

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

Он отлично работает, но как я могу получить доступ к настройкам, как все пути исходных файлов Java/Scala, например src/main/scala/*.scala и каталог целевого класса, например. цель/Scala-2.9.1/класс?

ответ

7

определяют taskKey, скажем

yourActionTask

затем

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 
} 

BTW. вы можете найти более предопределенные задачи/ключи в исходном коде Keys.scala или scaladoc sbt.

вот пример вы можете обратиться к который извлекается из одного из моего файла сборки (просто объединить 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

Смежные вопросы