2015-10-27 6 views
2

Я узнал, что Maven не всегда использует последнюю версию плагина.Как Maven решает, какую версию плагина использовать, если вы не указали какой-либо?

Например, org.codehaus.mojo:sonar-maven-plugin версия 2.7 была выпущена 19 октября, но 23 октября 2.6 все еще использовалась Maven (mvn sonar:sonar).

Я даже помню некоторые плагины, где в последней версии было несколько второстепенных выпусков над версией, которую Maven решил использовать.

Есть ли (центральный) индекс/список/база данных, где Maven просматривает, какую версию использовать? Если да, то где можно получить доступ вручную?

+0

Лучше всего подключить все версии используемых плагинов в компании/корпоративной пом. – khmarbaise

+0

Да, это правильно, но мы не можем изменить это для всех проектов сразу, поэтому я хочу отслеживать изменения в версиях плагина Maven по умолчанию. – BlackEye

+0

Нет версии плагина по умолчанию ....? – khmarbaise

ответ

4

Насколько я знаю, этот link ответит на ваш вопрос.

Автоматическая Plugin Version Разрешение

Когда плагин вызывается без явного версии, приведенной в POM или в командной строке, Maven 2.x используется, чтобы выбрать самую последнюю версию доступны, где последней версией может быть либо выпуск, либо снимок . Ради стабильности, Maven 3.x предпочитает последнюю версию с последней версией моментального снимка.

Учитывая угрозу невоспроизводимых сборок, наложенных автоматическим разрешением версии плагина , эту функцию планируется удалить как , так как объявления плагина в POM. Пользователи Maven 3.x обнаружит, что выводит предупреждение при обнаружении отсутствующих версий плагина, чтобы поощрять добавление версий плагина к POM или одному из своих родительских POM. Правило, requirePluginVersions Enforcer может быть используется дополнительно проверить отсутствие версии плагина в POM

+0

Я хотел бы, чтобы это ответило на мой вопрос. Например, когда я собираю mvn, используя Maven 3.3.9, он принимает maven-compiler-plugin 2.3.2, но 3.6.1 - последняя версия (11 выпусков позже). – BlackEye

1

Для выполнения командной строки, если версия не указана Maven ищет последнюю версию из (идентификатор группы/артефакт ID) мавенны Г.А. -metadata.xml.

Пример: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/maven-metadata.xml

Если вы кодирующая командной строки выполнение целей Maven в сборок следует указать версию для них, в противном случае сборок может изменяться в новые версии плагинов освобождены.

+0

Это не всегда может быть последним. Для примера mvn clean call использует maven-clean-plugin 2.5, но 2.6 2.6.1 и 3.0.0 уже выпущены. – BlackEye

1

Я знаю, что это древняя нить, но в интересах потомства и точности: все pom.xml s логически унаследовано от super POM. Вы всегда можете узнать, что ваш «реальный» pom.xml выглядит, набрав:

mvn help:effective-pom 

В результате pom.xml, что напечатанный представляет собой сочетание супер ПОМ, ваш pom.xml, и конечно любой родитель РОМ в смеси, а также ,

Супер POM предоставляется классом org.apache.maven.model.superpom.DefaultSuperPomProvider (https://github.com/apache/maven/blob/bce33aa2662a51d18cb00347cf2fb174dc195fb1/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java#L56-L85). Ресурс, который он загружает, - org/apache/maven/model/pom-4.0.0.xml (https://github.com/apache/maven/blob/bce33aa2662a51d18cb00347cf2fb174dc195fb1/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml#L23-L149).

+0

Это очень приятно знать, но супер POM не содержит никаких версий плагинов (по умолчанию для жизненного цикла). – BlackEye

+1

По крайней мере, с Maven 2: https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Super_POM; прокрутите вниз мимо первого шага XML до второго. Однако ваша точка зрения о том, что он отсутствует в Maven 3 super POM, является хорошим; Я посмотрю, смогу ли я его отследить. –

+0

Это довольно интересно. Если эта документация будет для Maven 3.X, это определенно ответит на мой вопрос. Должна быть такая вещь для Maven 3 ... – BlackEye