【问题标题】:Why do Apache Common dependencies conflict under sbt-onejar while sbt run works?为什么 sbt run 工作时 sbt-onejar 下的 Apache Common 依赖项冲突?
【发布时间】:2014-10-01 13:54:13
【问题描述】:

我的项目直接依赖于commons-configuration (1.6),但同时也在拉动: commons-beanutils-core (1.8.0) 和 commons-collections (3.2.1)。

最后两个似乎相互冲突,可能是因为它们都在包org.apache.commons.collections 中定义了类。我假设,因为在运行生成的 jar(使用 sbt 插件 sbt-onejar 打包)时,我在输出中看到很多错误,例如:

JarClassLoader:警告: org/apache/commons/collections/FastHashMap.class 在 lib/commons-beanutils-core-1.8.0.jar 被隐藏 lib/commons-collections-3.2.1.jar(不同字节码)

奇怪的是,当我只是“sbt run”(而不是生成一个单罐并手动运行它)时,这不会出现。

是我做错了什么,还是库中真的存在冲突?

【问题讨论】:

  • 那一定是一些我无法解释的 sbt-onejar-woodoo。由于它适用于sbt run,我想知道您需要 sbt-onejar 做什么? sbt-native-packager 有什么帮助吗(也许不会出现问题)?
  • 它似乎与 sbt-native-packager 确实可以正常工作(使用“stage”)。但是,这会产生很多文件,而我现在想保留“app = 1 文件”模型(应用程序本身仍然很小,依赖项很少,所以大小不是问题)以便于部署。
  • 有人报告了类似的问题:github.com/sbt/sbt-onejar/issues/9,sbt-onejar 作者建议修复类路径。但在那种情况下,这个人使用的是同一个库的 2 个不同版本。就我而言,重复项来自不同的公共库。
  • 啊,对。您的主要目标是在单个 jar 中拥有一个应用程序,并捆绑所有依赖项和其他文件。
  • 不幸的是,虽然 beanutils 在 1.9+ 版本中似乎已修复,但我无法根据此类最新版本找到配置版本。所以我的解决方案/解决方法是禁用(显然不需要的)依赖:libraryDependencies += "commons-configuration" % "commons-configuration" % "1.6" excludeAll( ExclusionRule(organization = "commons-beanutils", name = "commons-beanutils-core"), ExclusionRule(organization = "commons-beanutils", name = "commons-beanutils") )

标签: java sbt apache-commons


【解决方案1】:

您应该能够通过sbt update 了解依赖关系并查看target/resolution-cache/reports 下的报告。它们适用于您构建中的每个配置。

如果您可以将您的构建更新到 sbt 0.13.6(在project/build.properties 中),您可以使用evicted 任务。阅读https://github.com/sbt/sbt/releases/tag/v0.13.6:

sbt 0.13.6 在通过更新任务解决项目的托管依赖项时显示驱逐警告。

以后

要显示所有带有调用者信息的驱逐警告,请运行驱逐任务。

它还可以让您深入了解依赖项版本。

一旦你弄清楚什么依赖会带来受影响类的给定版本,你可以excludeAll它(as you've ultimately done given the comment)。

【讨论】:

  • 我不确定“驱逐”的真正含义。通过阅读发行说明,我想说它只查看依赖版本并在拉取 2 个不同的冲突版本时发出警告。在我的情况下,冲突来自 2 个不同命名的库中的重复类。也许这就是为什么我没有收到 sbt 0.13.6 的任何警告,执行“更新”或“驱逐”(也没有使用“one-jar”)。
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 2017-09-10
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 2012-05-06
  • 2018-03-20
  • 2019-04-02
相关资源
最近更新 更多