【问题标题】:dependsOn to instruct sbt to package dependent projects in multi-project build?dependsOn 指示 sbt 在多项目构建中打包依赖项目?
【发布时间】:2014-04-28 13:48:49
【问题描述】:

我在 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 结果。

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

【问题讨论】:

  • 有必要解释一下“导致 NoClassDefFoundError 的后果”,即您究竟什么时候遇到错误?您执行什么命令/任务以结束错误?请更新您的问题。

标签: sbt


【解决方案1】:

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

exportJars := true

这应该可以解决它。

【讨论】:

  • 我很好奇这实际上会如何产生预期的结果?如果这行得通,似乎在某些情况下我们不需要使用 sbt-assembly。
【解决方案2】:

我可能误解了你的问题...请原谅我。

来自Classpath dependencies

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

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

现在核心中的代码可以使用来自 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 中的任务都是单一的 -仅限项目)。

【讨论】:

  • sbt-assembly 可以打包依赖的项目吗?我发现 sbt-onejar 不能执行这样的事情。当我通过one-jar 命令打包jar 时,它只打包libraryDependancies 而不是相关项目。
猜你喜欢
  • 2015-09-24
  • 2013-08-07
  • 2019-07-28
  • 2018-11-28
  • 2014-02-18
  • 2018-03-20
  • 2014-02-26
  • 2013-11-18
  • 2013-01-30
相关资源
最近更新 更多