Лишние предупреждения при использовании maven-shade-plugin

Я использую maven-shade-plugin для простого проекта maven, плагин успешно включает все зависимости в окончательную "закрашенную" jar. Этот процесс всегда работает хорошо и дает именно то, что мне нужно.

При запуске "в первый" раз (после clean) плагин работает тихо и производит очень мало результатов. Однако при повторном запуске (без clean из последней сборки) появляется множество предупреждающих сообщений, подобных этому;

[WARNING] We have a duplicate package/a/b/foo.class
[WARNING] We have a duplicate package/c/d/bar.class

Это только предупреждающие сообщения, и последний артефакт работает нормально.

Мой вопрос прост: как я могу безопасно обойти или подавить эти предупреждающие сообщения без предварительного запуска clean?


примечание: Возможное решение - перейти к maven-assembly-plugin, но я бы предпочел не делать этого, потому что конфигурация для maven-shade-plugin < / em> очень красиво и просто.


person xconspirisist    schedule 16.01.2012    source источник
comment
Я предполагаю, что все указанные дубликаты - это классы зависимостей, верно? В этом случае они, скорее всего, сначала извлекаются в какую-то папку, поэтому вы можете добавить шаг очистки для этих папок до или после фазы пакета (в зависимости от того, нужны ли вам эти классы между сборками).   -  person Thomas    schedule 16.01.2012
comment
У меня тот же вопрос, что и выше ... как подавить предупреждения. В моем случае я включаю зависимости из многочисленных jar-файлов пакетов Spring, над которыми я не контролирую, т.е. я не могу очистить раньше.   -  person Mark Laff    schedule 03.04.2012
comment
Это как раз моя проблема! О боже!   -  person plasma147    schedule 13.06.2012
comment
Какую версию maven-shade-plugin вы использовали? Похоже, аналогичная ошибка была в версиях ‹1.2 ... maven.40175.n5.nabble.com/   -  person rogerdpack    schedule 13.03.2019


Ответы (1)


Это потому, что он закрашивает файлы в уже закрашенную банку.

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

С точки зрения плагинов затенения он не знает, что он уже закрашен, поэтому просто пытается снова добавить классы.

Мы можем заставить maven создавать jar каждый раз, настроив плагин jar:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-jar-plugin</artifactId>
   <version>2.4</version>
   <configuration>
     <forceCreation>true</forceCreation>
   </configuration>
</plugin>

И у меня это работает. Либо так, либо просто выполните чистую установку

person plasma147    schedule 13.06.2012
comment
Спасибо за это. Есть ли другой способ заставить плагин использовать original jar? Я не понимаю динамики между maven-jar-plugin и maven-shade-plugin - person Dmitry Minkovsky; 26.05.2016
comment
Я хочу добавить, что если вы также создаете закрашенные исходные файлы JAR с помощью Maven Shade, вы также захотите добавить ту же опцию <forceCreation>true</forceCreation> в Maven Source Plugin для соответствующего модуля. - person kriegaex; 08.07.2020