Maven 3 попередження про build.plugins.plugin.version


313

Після оновлення до Maven 3 я отримую такі попереджувальні повідомлення при кожній збірці:

Як я можу позбутися цих попереджень?

[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model for proj:id:jar:3.1
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-javadoc-plugin is missing. @ line 195, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 204, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-surefire-plugin is missing. @ line 227, column 15
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-jar-plugin is missing. @ line 215, column 15
[WARNING] 'reporting.plugins.plugin.version' for org.codehaus.mojo:jdepend-maven-plugin is missing. @ line 271, column 15
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.

1
У Maven 3.5.3 це помилка. Не ігноруйте попередження! Дякуємо @gavenkoa за відповідь про те, як знайти версію плагіна.
jwm

Відповіді:


400

Додати <version>елемент по черзі <plugin> <artifactId>в вашому pom.xmlфайлі. Знайдіть такий текст:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>

Додайте до нього тег версії:

<plugin>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>2.3.2</version>

Попередження має бути вирішене.

З цього приводу:

'build.plugins.plugin.version' для org.apache.maven.plugins: відсутній плагін maven-компілятор

Багато людей згадували, чому це відбувається, але не пропонують виправити. Все, що мені потрібно було зробити - це зайти у свій файл POM для мого проекту та додати <version>тег, як показано вище.

Щоб дізнатись номер версії, один із способів полягає у пошуку результатів Maven після його завершення. Там, де у вас відсутні номери версій, Maven відобразить свою версію за замовчуванням:

[INFO] --- maven-compiler-plugin:2.3.2:compile (default-compile) @ entities ---

Візьміть номер версії (як зазначено 2.3.2вище) та додайте її до своєї POM, як показано.


4
@JBT не розумію, чому? maven builds повинен бути стабільним, тому яку версію ви використовуєте, слід чітко визначити. Ось чому мавен просить про це. Як і в повідомленні, "настійно рекомендується виправити ці проблеми, оскільки вони загрожують стабільності вашої збірки".
eis

3
Це трохи дивно, хоча, як ви отримаєте цю проблему, лише якщо ви додали запис для плагіна до файлу POM проекту. Ефективний POM має елемент версії, але вам все одно потрібно додати елемент версії до проекту POM, щоб видалити це попередження.
oenpelli

2
Я отримую ті ж попередження, що й оригінальне запитання, але мій pom.xml не має посилання на maven-компілятор-плагін. Що я пропускаю? Дякую!
Vítor E. Silva Souza

3
Не працювали для мене. Тег версії плагіна вже був.
Ерран Морад

4
Чи є остання версія 2.3.2? Як ви можете сказати, хто з них? Або це не має значення?
Pocketkid2

84

Бігайте так:

  $ mvn help: опишіть -DartifactId = maven-war-плагін -DgroupId = org.apache.maven.plugins

для плагінів, які не мають версії. Ви отримуєте вихід:

Ім'я: Maven WAR Plugin
Опис: Створює файл архіву веб-додатків (WAR) з проекту
  вихід та його залежності.
Ідентифікатор групи: org.apache.maven.plugins
Артефакт Id: maven-war-плагін
Версія: 2.2
Приставка мети: війна

Використовуйте версію, показану на виході.

ОНОВЛЕННЯ Якщо ви хочете вибрати серед списку версій, використовуйте http://search.maven.org/ або http://mvnrepository.com/ Зверніть увагу, що у вашому улюбленому Java IDE повинно бути діалогове вікно пошуку пакетів Maven . Просто перевірте документи.

СУПЕР ОНОВЛЕННЯ Я також використовую:

$ mvn dependency:tree
$ mvn dependency:list
$ mvn dependency:resolve
$ mvn dependency:resolve-plugins  # <-- THIS

Нещодавно я дізнався, як отримати найновішу версію для плагіна (або бібліотеки), щоб більше не потребувати гуглінгу чи відвідування Maven Central :

$ mvn versions:display-dependency-updates
$ mvn versions:display-plugin-updates     # <-- THIS

6
+1. Альтернативний і більш компактний варіант:mvn help:describe -Dplugin=groupId:artifactId
informatik01

3
Дійсно, це не дало рішення, але все одно це цінний зміст: як насправді можна знайти використану / очікувану версію. Може бути , це було б що - то варто згадати , розміщуючи цей плагін-версію в батьківському-П з використанням pluginManagement-тега: stackoverflow.com/a/10483284/1023341
gkephorus


11

отримати останню інформацію про версію від:

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin

натисніть останню версію (або ту, яку ви хочете використовувати), і ви побачите інформацію про залежність (станом на 2019-05, це 3.8.1):

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<dependency>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.8.1</version>
</dependency>

ви можете використовувати тег версії та коментар до свого тегу плагінів.

<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-compiler-plugin -->
<plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.8.1</version>
    <configuration>
        <source />
        <target />
    </configuration>
</plugin>

якщо вам подобається, ви можете змінити свій пом, щоб інформація про версію містилась у тезі властивостей, як зазначено в іншій відповіді.


10

Я використовую батьківський пом для своїх проектів і хотів вказати версії в одному місці, тому я використовував властивості, щоб вказати версію:

батьківський пом:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ....
    <properties>
        <maven-compiler-plugin-version>2.3.2</maven-compiler-plugin-version>
    </properties>
    ....
</project>

проект пом:

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
         http://maven.apache.org/xsd/maven-4.0.0.xsd">
    ....
    <build>
        <finalName>helloworld</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin-version}</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Дивіться також: https://www.allthingsdigital.nl/2011/04/10/maven-3-and-the-versions-dilemma/


1
Я думаю, що може бути краще, або принаймні більш природно, використовувати pluginManagement для версій плагінів.
Джонатан Розенна

За винятком випадків, коли у вас є переважаючий плагін Управління в дитячій POM.
Джонатан Розенна

2

Тут чудова відповідь. І я хочу додати "Чому додати елемент у Maven3".
У примітках про сумісність Maven 3.x

Роздільна здатність метаверсії Plugin
внутрішньо Maven 2.x використовувала спеціальні маркери версій RELEASE та LATEST для підтримки автоматичної роздільної здатності версії плагіна. Ці метаверсії також були розпізнані в елементі декларації. Заради відтворюваних збірок Maven 3.x більше не підтримує використання цих метаверсій в POM. В результаті користувачам потрібно буде замінити виникнення цих метаверсій конкретною версією.

І я також знаходжу в maven-компілятор-плагін - використання

Примітка: Maven 3.0 видасть попередження, якщо не вказати версію плагіна.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.