#java #android #maven #gradle #jersey
#java #Android #maven #gradle #джерси
Вопрос:
Я использую Gradle для своего проекта. Одна из зависимостей, которые я указал в моем build.gradle, это
compile 'org.glassfish.jersey.media:jersey-media-moxy:2.0'
Это отлично работает в обычном Java-приложении, однако, когда я пытаюсь собрать его на Android, я получаю:
При взгляде на то, на какие библиотеки ссылаются, становится ясно, что есть обе, javax.inject-2.3.0-b05.jar
и javax.inject-1.jar
, которые, как я обнаружил, добавлены зависимостью выше. Я предполагаю, что этот «дублирующий» jar является причиной ошибки сборки.
Как мне обойти это? Почему зависимость включает в себя две одинаковые jar? Есть ли способ либо создать версию Android с этими двумя jar, либо удалить один из этих jar?
Ответ №1:
Похоже, у вас есть дерево зависимостей, похожее
project
|--- org.glassfish.jersey.media:jersey-media-moxy:2.0
| --- *:javax.inject:1
--- *:javax.inject:2.3.0-b05
Где * — это группа, которая, как я подозреваю, может отличаться от этих двух.
Попробуйте получить представление о том, как обрабатываются ваши зависимости, используя задачу dependency
gradle dependency
Если вам нужно исключить зависимость, введите ее в тег, аналогично приведенному ниже примеру
compile('org.hibernate:hibernate:3.1') {
//excluding a particular transitive dependency:
exclude module: 'cglib' //by artifact name
exclude group: 'org.jmock' //by group
exclude group: 'org.unwanted', module: 'iAmBuggy' //by both name and group
}
Ответ №2:
Обычно gradle будет включать только 1 jar для каждой зависимости. Если для тех же зависимостей найдена другая версия, будет использоваться более новая версия.
Однако в вашем случае эти 2 jar являются зависимостями с разными названиями групп:
'javax.inject:javax.inject:1'
'org.glassfish.hk2.external:javax.inject:2.3.0-b05'
Вот почему gradle включил обе, поскольку они рассматриваются как разные зависимости.
‘javax.inject:javax.inject: 1’ очень старый, я думаю, вам следует исключить его, как сказал Нильс Бек Нильсен.
Чтобы выяснить, откуда взялась эта зависимость, вы можете использовать command:
gradle -q dependencyInsight --dependency inject