我在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
Run Code Online (Sandbox Code Playgroud)
当我使用package或one-jar命令时,common项目中的类和资源不会打包到jar data或resultjar中.所以当我运行生成的jar时
java -jar data_2.10-1.0-onejar.jar
Run Code Online (Sandbox Code Playgroud)
因此导致NoClassDefFoundError.
那么有人可以帮我解决这个问题吗?提前致谢.
我可能误解了你的问题......如果我有的话,请原谅我。
来自类路径依赖项:
一个项目可能依赖于另一个项目中的代码。这是通过添加 dependentOn 方法调用来完成的。
以及稍后(在同一个文档中):
现在 core 中的代码可以使用 util 中的类。这也会在编译项目时在项目之间创建顺序;必须先更新并编译 util,然后才能编译 core。
然后在每个配置类路径依赖项中:
foo dependentOn(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.
Run Code Online (Sandbox Code Playgroud)
甚至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
Run Code Online (Sandbox Code Playgroud)
话虽如此,package它不会打包其他项目的工件 - 您需要sbt-assemble插件(因为您跨越了单个项目的边界,并且 sbt 中的大多数任务(如果不是所有任务)都只是单个项目)。
| 归档时间: |
|
| 查看次数: |
3394 次 |
| 最近记录: |