В свете этого ответа предполагается, что вы используете какой-то плагин, такой как плагин Maven Assembly или Maven EAR, чтобы скопировать все зависимости проекта в вашу целевую папку.
Весьма вероятно, чтонекоторая зависимость, такая как Guice, использует артефакт aopalliance:aopalliance
(нотация groupId: artifactId), тогда как вы только что добавили зависимость на org.aopalliance:aopalliance
.Maven не знает, что он просто добавил одни и те же файлы классов дважды - он проверяет groupId и artifactId, чтобы увидеть, различаются ли (предположительно) два jar-файла.
У вас есть два варианта:
Удалите зависимость в poms или измените groupId на aopalliance
.
Отследите, откуда исходит зависимость aopalliance
, затем исключите aopalliance
Артефакт из транзитивных зависимостей проблемных артефактов.
Вы можете сделать (2), запустив mvn dependency:tree
или с помощью плагина M2Eclipse, открыв POM и просмотрев вкладку Иерархия зависимостей.Вот пример выходных данных команды зависимостей: tree:
mygroup:earproj:pom:2.3.1-SNAPSHOT
+- mygroup:wslib:jar:2.3.1-SNAPSHOT:compile
| +- axis:axis:jar:1.4:compile
| | +- org.apache.axis:axis-saaj:jar:1.4:compile
| | +- axis:axis-wsdl4j:jar:1.5.1:runtime
| | +- commons-logging:commons-logging:jar:1.0.4:runtime
| | \- commons-discovery:commons-discovery:jar:0.2:runtime
| +- org.apache.axis:axis-jaxrpc:jar:1.4-noqname:compile
| \- commons-httpclient:commons-httpclient:jar:3.0.1:runtime
| \- commons-codec:commons-codec:jar:1.2:runtime
+- mygroup:commonclass:2.3.1-SNAPSHOT:compile
Взгляните, например, на регистрацию в общем достоянии, мы видим, что от нее зависит библиотека axis: axis.
ОднаждыВы знаете, какая библиотека зависит от aopalliance
, , вы можете добавить исключение в POM .Было бы предпочтительнее, если вы сохраните это исключение и объявление зависимости org.aopalliance
в том же POM.