【发布时间】:2014-07-09 06:59:54
【问题描述】:
我有一个仅限 java 的多项目 sbt 构建。我有一个构建 .war 文件的项目(带有xsbt-web-plugin)。这取决于构建捆绑到 .war 中的 .jar 的其他项目。
在 .jar 项目中,我需要运行一个在编译后生成 .class 文件的外部进程,并将这些类捆绑到为项目打包的 .jar 中。
所以我可以有一个依赖于compile 的任务,并像这样使用类路径和输出目录:
val ClassGen = TaskKey[Int]("generate-classes", "generates classes")
val ClassGenTask = ClassGen <<= doClassGen()
def doClassGen() =
(streams in Compile,
compile in Compile,
classDirectory in Compile,
fullClasspath in Compile) map {
...
"command here" !
}
这似乎导致任务依赖于编译。如果我有 package 取决于我的任务,我认为这将在构建 .jar 文件之前全部运行:
sbt.Keys.`package` <<= (sbt.Keys.`package` in Compile) dependsOn ClassGen
但是...当我在依赖项目(.war 项目)中执行 package 任务时,它确实不似乎导致 package 在依赖项中执行。我尝试打开exportJars 无济于事。
我还看到我的类生成但没有出现在 .jar 文件中的情况。这似乎是因为 package 任务在我的 ClassGen 任务之前运行。
我很困惑如何依赖编译后、生成类的外部流程任务的输出,以及如何正确地使用项目间依赖项来获得该依赖项序列。我已经按照here 研究了exportedProducts,这似乎是依赖项目会寻找的东西,但我不知道如何使它工作。
【问题讨论】: