dependsOn指示sbt在多项目构建中打包依赖项目?

时间:2014-03-21 09:18:33

标签: sbt

我在sbt中创建了一个多项目构建。这是主目录中的 build.sbt

lazy val root = project in file(".") aggregate(data, reco, result)

lazy val data = project dependsOn(common)

lazy val reco = project 

lazy val result = project dependsOn(common)

lazy val common = project

当我使用packageone-jar命令时,common项目中的类和资源未打包到dataresult个jar中。所以当我通过

运行生成的jar时
java -jar data_2.10-1.0-onejar.jar

因此导致NoClassDefFoundError。

那么有人可以帮我解决这个问题吗?提前谢谢。

2 个答案:

答案 0 :(得分:3)

您的依赖项目不会导出Jars(仅生成类)。将以下行放在所有依赖项目的build.sbt中(如果需要,也包括当前项目):

exportJars := true

那应该解决它。

答案 1 :(得分:0)

我可能会误解你的问题......如果我有,请原谅我。

来自Classpath dependencies

  

项目可能依赖于另一个项目中的代码。这是通过   添加dependsOn方法调用。

以后(在同一个文档中):

  

现在核心代码可以使用util中的类。这也创造了一个   编制项目时在项目之间进行排序; util必须是   在核心编译之前更新和编译。

然后在Per-configuration classpath dependencies

  

foo dependsOn(bar)表示foo中的编译配置取决于   关于bar中的编译配置。

我们可能还需要查看package的全部内容:

> help package
Produces the main artifact, such as a binary jar.  This is typically an alias for the task that actually does the packaging.

甚至inspect它可以看到它有哪些依赖项:

> inspect package
[info] Task: java.io.File
[info] Description:
[info]  Produces the main artifact, such as a binary jar.  This is typically an alias for the task that actually does the packaging.
[info] Provided by:
[info]  {file:/C:/dev/sandbox/0.13.2/}root-0-13-2/compile:package
[info] Defined at:
[info]  (sbt.Defaults) Defaults.scala:565
[info] Dependencies:
[info]  compile:packageBin
[info] Delegates:
[info]  compile:package
[info]  *:package
[info]  {.}/compile:package
[info]  {.}/*:package
[info]  */compile:package
[info]  */*:package
[info] Related:
[info]  jacoco:package
[info]  test:package

尽管如此,package并没有包装其他项目的工件 - 您需要使用sbt-assembly插件(因为您跨越了单个的边界)项目和sbt中的大多数(如果不是全部)任务仅为单项目。)