如何使用commons-beanutils对beanutils依赖项进行重复数据删除?

ale*_*bit 6 dependencies sbt maven-shade-plugin sbt-assembly

我有一个具有多个依赖项的项目,最终导致依赖于以下各项(我从sbt-dependency-graph plugin中获得了这些依赖项):

  • commons-beanutils:commons-beanutils:1.7.0
  • commons-beanutils:commons-beanutils-core:1.8.0

因此,当我尝试使用sbt-assembly构建胖JAR时,它将失败,并出现以下重复数据删除错误:

[error] deduplicate: different file contents found in the following:
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils/jars/someuser-beanutils-1.7.0.jar:org/apache/commons/beanutils/BasicDynaBean.class
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar:org/apache/commons/beanutils/BasicDynaBean.class
Run Code Online (Sandbox Code Playgroud)

由于我需要两个依赖项,因此我尝试使用以下规则对其中之一进行着色:

ShadeRule.rename("org.apache.commons.beanutils.**" -> "shadedstuff.beanutils.@1").inLibrary("commons-beanutils" % "commons-beanutils" % "1.7.0").inAll
Run Code Online (Sandbox Code Playgroud)

但是然后我得到以下错误:

[error] deduplicate: different file contents found in the following:
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils/jars/someuser-beanutils-1.7.0.jar:shadedstuff/beanutils/BasicDynaBean.class
[error] /Users/someuser/.ivy2/cache/commons-beanutils/commons-beanutils-core/jars/commons-beanutils-core-1.8.0.jar:shadedstuff/beanutils/BasicDynaBean.class
Run Code Online (Sandbox Code Playgroud)

好像对两个工件都应用了阴影处理。如何遮蔽特定的伪影?

Eug*_*ota 4

由于我需要这两个依赖项,因此我尝试使用以下规则对其中一个依赖项进行遮蔽:

ShadeRule.rename("org.apache.commons.beanutils.**" -> "shadedstuff.beanutils.@1").inLibrary("commons-beanutils" % "commons-beanutils" % "1.7.0").inAll
Run Code Online (Sandbox Code Playgroud)

着色是 sbt-assemble 的一个贡献功能,它基本上与Jar Jar Links集成,所以我不是这方面的专家。

话虽如此,我认为.inAll违背了你打电话的目的.inLibrary(...)。也许我在自述文件中描述的方式不够清楚。

我认为您想要做的是将inLibrary(...)commons-beanutils 1.7.0及其所有引用 commons-beanutils 1.7.0 代码的调用者放入org.apache.commons.beanutils.**(在本例中为 Hadoop?)