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

Dza*_*nvu 8 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
Run Code Online (Sandbox Code Playgroud)

当我使用packageone-jar命令时,common项目中的类和资源不会打包到jar dataresultjar中.所以当我运行生成的jar时

java -jar data_2.10-1.0-onejar.jar
Run Code Online (Sandbox Code Playgroud)

因此导致NoClassDefFoundError.

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

Jac*_*ski 0

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

来自类路径依赖项

一个项目可能依赖于另一个项目中的代码。这是通过添加 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 中的大多数任务(如果不是所有任务)都只是单个项目)。