我在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
当我使用package
或one-jar
命令时,common
项目中的类和资源未打包到data
或result
个jar中。所以当我通过
java -jar data_2.10-1.0-onejar.jar
因此导致NoClassDefFoundError。
那么有人可以帮我解决这个问题吗?提前谢谢。
答案 0 :(得分:3)
您的依赖项目不会导出Jars(仅生成类)。将以下行放在所有依赖项目的build.sbt中(如果需要,也包括当前项目):
exportJars := true
那应该解决它。
答案 1 :(得分:0)
我可能会误解你的问题......如果我有,请原谅我。
项目可能依赖于另一个项目中的代码。这是通过 添加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中的大多数(如果不是全部)任务仅为单项目。)