сборка sbt: дедупликация module-info.class - PullRequest
0 голосов
/ 22 февраля 2019

Я получаю следующую ошибку при сборке моего uber jar:

java.lang.RuntimeException: дедупликация: различное содержимое файла, обнаруженное в следующем: [error] /Users/jake.stone/.ivy2 / cache / org.bouncycastle / bcprov-jdk15on / jars / bcprov-jdk15on-1.61.jar: module-info.class [ошибка] /Users/jake.stone/.ivy2/cache/javax.xml.bind/jaxb-api / jars / jaxb-api-2.3.1.jar: module-info.class

Я не знаком с технологией Java, но предполагаю, что не могу просто отказаться от одного из этих классов.

Может кто-нибудь сказать мне, какую mergeStrategy я могу использовать для безопасной компиляции uber jar?

1 Ответ

0 голосов
/ 07 апреля 2019

Ответ зависит от вашей среды и того, чего вы хотите достичь.

JDK 8

У меня была такая же проблема с проектом, использующим JDK 8. JDK 8 не использует файл module-info.class, поэтому можно безопасно удалить файл.

Добавьте следующее к вашему build.sbt:

assemblyMergeStrategy in assembly := {
  case "module-info.class" => MergeStrategy.discard
  case x =>
    val oldStrategy = (assemblyMergeStrategy in assembly).value
    oldStrategy(x)
}

Это просто отбрасывает файлы.

JDK 11

Если вы используете JDK 11 с проектом конечного пользователя (не библиотекой), то это также должно быть безопасно, так как если вы создаете uber-jar, все классы включены и никаких внешних зависимостей не требуется.Просто протестируйте его с помощью короткого теста (недостаточно, чтобы сказать, что он всегда безопасен).

Если вы используете JDK 11 и создаете библиотеку, то лучше не создавать uber-jar.В этом случае падение module-info.class, скорее всего, создаст банку, которая не будет работать.В этом случае просто зависит от библиотек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...