Как дедуплицировать зависимости beanutils с помощью commons-beanutils?

У меня есть проект с несколькими зависимостями, которые в конечном итоге приводят к зависимости от следующего (я получил их от sbt- подключаемый модуль графика зависимостей):

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

Как следствие, когда я пытаюсь создать толстый JAR с помощью sbt-assembly, происходит сбой с дедупликацией. ошибки как:

[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

Поскольку мне нужны обе зависимости, я попытался затенить одну из них, используя следующее правило:

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

Но затем я получаю следующую ошибку:

[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

Как будто процесс затенения применяется к обоим артефактам. Как затенить конкретный артефакт?


person ale64bit    schedule 10.12.2015    source источник
comment
Для плагина тени см. stackoverflow.com/questions/14402745/   -  person rogerdpack    schedule 11.03.2019


Ответы (1)


Поскольку мне нужны обе зависимости, я попытался затенить одну из них, используя следующее правило:

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

Затенение — это дополнительная функция sbt-assembly, которая в основном интегрируется с ссылками на Jar Jar, поэтому Я не эксперт в этом.

Сказав это, я думаю, что .inAll противоречит цели вашего .inLibrary(...) звонка. Возможно, то, как я описал это в README, было недостаточно ясным.

Я думаю, что вы хотите сделать, это поставить inLibrary(...) для commons-beanutils 1.7.0 и всех его вызывающих, которые ссылаются на код commons-beanutils 1.7.0 как org.apache.commons.beanutils.** (в данном случае Hadoop?)

person Eugene Yokota    schedule 11.12.2015
comment
Конечно. Удаление .inAll устраняет проблему. Я неправильно понял документацию, но теперь все кажется довольно ясным. Большое спасибо за поддержку. - person ale64bit; 14.12.2015
comment
@ ale64bit, не могли бы вы привести фрагмент рабочего файла build.sbt. У меня похожая проблема при зависимости org.apache.hadoop:hadoop-aws:2.7.3. - person Interfector; 09.09.2016