2010-11-19 5 views
2

Я просто потерял 2 часа из-за ошибки в maven-compiler-plugin v2.0.2, которая была исправлена ​​в версии v2.3.2.Как получить Maven для использования последних версий некоторых плагинов?

Очевидно, если вы не укажете версию плагина Maven-компилятора, Maven 2.2.1 просто даст вам v2.0.2.

В нашем проекте используются 15+ плагинов Maven. Некоторые из них мы хотим скопировать определенную версию, но большинство из них (например, плагин компилятора), которые мы хотели бы обновить, не задумываясь об этом.

Есть ли способ сделать это автоматически с Maven, или нам нужно назначить кому-то неблагодарную задачу исследовать возможные обновления плагина Maven каждый месяц, а затем изменить номера версий PluginManagement в нашей родительской POM?

+2

Это непосредственно не применимы, но maven3 выдает предупреждение, когда вы не предоставите номер версии плагинов, размещения на что предупреждение для обратной совместимости. – Jeremy

+0

@Jeremy Не отстающие совместимые изменения будут в Maven 3.1. Между тем, Maven 3.0 помогает вам исправить своих попов. –

ответ

6

Вы можете связать что-то вроде versions-maven-plugin с вашей основной сборкой, чтобы получить отчет по каждой сборке, который показывает, обновлены ли ваши плагины.

Смотрите эту ссылку подробно о том, как: Display Plugin Updates

Если вы хотите получить фантазии, ваш сервер CI запустить выход вашего мавена построить через скрипт для проверки записей [WARNING] журнала, сигнализирующих новые версии, а затем уведомить соответствующих членов вашей команды по электронной почте или другому уведомлению.

+1

Святое дерьмо ... использовал Maven в течение 2+ лет, понятия не имел, что я могу просто запустить mvn-версии: display-plugin-updates и получить всю полезную информацию. Это все еще нужно делать вручную, но это действительно облегчает задачу. То же самое для регулярных зависимостей тоже с версиями mvn: display-dependency-updates - спасибо. – HDave

5

Второй раз, когда я добираюсь, чтобы написать об этом сегодня:

Попробуйте использовать -cpu флаг. Выходной сигнал от mvn -help:

usage: mvn [options] [<goal(s)>] [<phase(s)>] 

Options: 
-cpu,--check-plugin-updates   Force upToDate check for any 
             relevant registered plugins 
+3

FWIW, эта опция устарела в Maven 3.0. –

2

Вы также можете использовать диапазоны версий в своих плагинах.

+0

Baaaaaaaaaaaad практика, не делайте этого. –

+0

@Pascal: Забавно, что вы это говорите. Для зависимостей наша команда сорта согласилась, что это больше боль, которую она стоит. Но использовать его с плагинами, неужели это так плохо? Это также задает мне вопрос: если это вообще плохая практика, то в чем его прецедент? – javamonkey79

+0

На мой взгляд, нет допустимого варианта использования (и хотя Maven делает * поддержку * диапазонов версий, я считаю, что это не поощряет их использование). –

7

Очевидно, если вы не укажете версию плагина Maven для компилятора, Maven 2.2.1 просто даст вам v2.0.2.

Да, из Maven 2.0.9 (см MNG-3395) в версии ядра и общих плагинов фиксированы в Maven отключен плагин версии открытия ради сборки воспроизводимости в super POM и.

В нашем проекте используются 15+ плагинов Maven. Некоторые из них мы хотим скопировать определенную версию, но большинство из них (например, плагин компилятора), которые мы хотели бы обновить, не задумываясь об этом.

Как было намечено выше, это плохая идея. Вы просто не хотите, чтобы сборка maven внезапно начала сбой из-за некоторого обновления плагина. Другими словами, вы должны использовать фиксированные версии, а не делать это плохая практика. Фактически, Maven 3.0 продвигает эту практику и предупреждает вас, если вы этого не сделаете. И в 3.1, вам нужно будет указать версию (см. MNG-1968).

Лично я использую Maven Enforcer Plugin и его правило Require Plugin Versions для обеспечения соблюдения этой практики (что означает, что сборка завершится неудачно, если вы не заблокируете версии плагинов).

Есть ли способ сделать это автоматически с помощью Maven, или же мы должны назначить кому-то неблагодарную задачу исследовать возможный Maven плагина в обновление каждый месяц, а затем изменить номера версии PluginManagement в нашем родителю POM?

Как было предложено, то Versions Maven Plugin есть цели, позволяющих проверить, есть ли более поздние версии плагин, зависимости и т.д. (и обратите внимание, что -cpu осуждается в Maven 3.0 и будет удален из будущих версий).

Но настоящий вопрос: почему вы хотите всегда использовать конечные версии? IMO, нет оснований для этого, вы должны обновиться, только если есть что исправить («если он не сломался, не исправляйте его»).

Итог: использовать фиксированные версии плагинов и забыть автоматические обновления, диапазоны версий и т.д.

+0

+ 1 для этого: «Лично я использую плагин Maven Enforcer и его правило« Требовать правила подключаемых модулей »для обеспечения соблюдения этой практики (что означает, что сборка завершится неудачно, если вы не заблокируете версии плагинов)». – javamonkey79

+0

@ javamonkey79: Это один из моих любимых плагинов. Я использую его во всех своих сборках. –

+0

@ javamonkey79: BTW, не стесняйтесь проголосовать :) –

Смежные вопросы