Maven JAR Plugin 3.0.2 ошибка: вы должны использовать классификатор для присоединения дополнительных артефактов к проекту вместо их замены
Maven jar plugin (версия 3.0.2) продолжает выдавать следующую ошибку, даже для одного вызова цели jar
:
[ошибка] не удалось выполнить целевую организацию.апаш.знаток.Плагины: maven-jar-plugin: 3.0.2: jar (по умолчанию) в тесте проекта: вы должны использовать классификатор для добавления дополнительных артефактов в проект вместо их замены. - >[Справка 1]
Вот такой (минимальный?) pom.xml
, что демонстрирует проблему:
<project xmlns="http://maven.apache.org/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>1.0.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
В вызов-это просто mvn package
.
- кажется, не имеет значения, есть ли вообще какие - либо классы/ресурсы-в любом случае появляется сообщение об ошибке выше. Проблема также возникает, если заданы две цели (
- проблема не возникает, еслине указаны цели . Но это не вариант, так как мне действительно нужны и
jar
, иtest-jar
.
jar
и test-jar
).
Согласно документации , classifier
только нужно указать на несколько вызовов одной и той же цели, и есть разумный дефолт для цели test-jar
, которую я не собираюсь менять.
Также, проблема, кажется, не появляется на 2.x строка плагина JAR.
Я что-то пропустил? Может кто-нибудь подсказать, что я делаю не так?
P.S. версия Maven - 3.3.9.
2 ответа:
Плагин Jar фактически выполняется дважды с конфигурацией:
<plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <goals> <goal>jar</goal> </goals> </execution> </executions> </plugin>
Если вы проверите журналы с такой конфигурацией, у вас будет что-то вроде:
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ test --- [INFO] Building jar: ...\test\target\test-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- maven-jar-plugin:3.0.2:jar (default) @ test --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------
Означает, что плагин был фактически выполнен дважды. Что происходит, так это то, что плагин Jar, в проекте, который имеет упаковку
jar
имеет исполнение по умолчанию, привязанное к Фазеpackage
. Это выполнение по умолчанию-то, которое упоминается в журналах с идентификаторомdefault-jar
.Когда вы настроив
<execution>
в плагине, вы фактически настроили новое выполнение, гдеjar
Цель плагина должна быть вызвана. С тех пор какjar
Цель привязывается по умолчанию к Фазеpackage
, что выполнение выполняется на этой фазе, после привязки по умолчанию, присущей упаковкеjar
. И так как плагин уже запущен, он терпит неудачу, потому что запуск его снова фактически заменит основной артефакт, уже созданный во время первого запуска. Эта ошибка была добавлена в версии 3.0.0 плагина в MJAR-198 , потому что такая вещь происходит, очень вероятно, неправильная конфигурация, которая должна быть обнаружена рано.Как таковое, исправление просто: не выполняйте выполнение, которое определяет цель
jar
, и пусть работа выполняется по умолчанию (исходя из упаковкиjar
). JAR все равно будет создан, даже без явной конфигурации целиjar
, благодаря выполнению по умолчанию. Если вам также нужен тестовый JAR, вам все равно нужно будет настроить плагин для этого с помощью:Но обратите внимание, что цель<plugin> <artifactId>maven-jar-plugin</artifactId> <version>3.0.2</version> <executions> <execution> <goals> <goal>test-jar</goal> </goals> </execution> </executions> </plugin>
jar
не указана.