我有一个java-only的多项目sbt构建。我有一个建立.war文件的项目(与xsbt-web-plugin)。这取决于其他构建.jars的项目,这些项目将捆绑到.war中。如何在sbt中正确依赖外部生成的类?
在.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文件建造之前:当我在依赖项目(该项目的.war)执行package
任务
sbt.Keys.`package` <<= (sbt.Keys.`package` in Compile) dependsOn ClassGen
但是... ,它的确如此而不是似乎导致package
在依赖项中执行。我试图打开exportJars
无济于事。
我也看到了我的类生成但没有出现在.jar文件中的情况。这似乎是由于package
任务在我的ClassGen任务之前运行。
我对如何依赖后编译的输出,生成类的外部流程任务以及具有项间依赖性的正确依赖关系序列感到困惑。我已根据here调查了exportedProducts
,这似乎很可能是依赖项目寻找的东西,但对于如何使其发挥作用没有想法。