Как запустить плагин Maven на всех модулях? - PullRequest
3 голосов
/ 13 мая 2011

У меня есть собственный плагин, который я запускаю на всех наших проектах в рамках релиза: выполнить цель.

Мы только начинаем использовать многомодульные сборки, и я замечаю, что мой плагин работает только наверхний модуль.Что мне нужно сделать с моим плагином, чтобы он работал на всех модулях в конце выпуска?Должен ли я перебирать их в самом коде плагина?Если да, то есть ли пример того, как это сделать, потому что из того, что я вижу, MavenProject.getModules () просто возвращает список имен String этих модулей, и я не вижу, как получить информацию для этих модулей (мой плагин нуждаетсяgroupId: artifactId: версия каждого, и в этом случае модули не всегда имеют одну и ту же версию).

Я пробовал с @aggregator и без него, но это ничего не меняет в отношениик моей проблеме.

Я предполагаю, что это тот же случай, что и запуск плагина напрямую (без привязки к фазе) из CLI, который также работает только на верхнем уровне проекта и сообщает SKIPPEDдля всех подмодулей.

Я использую Maven 3.0.3.

Ответы [ 2 ]

2 голосов
/ 13 декабря 2011

У меня была такая же проблема с моим плагином Maven. Он вызывался только один раз (как правило, для первого модуля в реакторе), и я в итоге проследил это до того факта, что мой плагин имел аннотацию Maven "@requiresProject false". Кажется, что Maven Reactor вызывает такие плагины только один раз. Как только я переключился на «@requiresProject true», мой mojo вызывался один раз для каждого модуля. Я не собирался выпускать: выступать, так что YMMV.

Что касается доступа ко всем модулям, вместо использования MavenProject.getModules (), который дает их имена, вы можете добавить их объекты MavenProject следующим образом:

   /**
    * The projects in the reactor.
    *
    * @parameter expression="${reactorProjects}"
    * @readonly
    */
   private List<MavenProject> reactorProjects;

Следите за @aggregator при связывании с фазами жизненного цикла. «При связывании с жизненным циклом агрегаторный модж может иметь некоторые неприятные побочные эффекты. Он может заставить выполнение этапа ... жизненного цикла выполняться раньше времени и может привести к сборкам, которые в итоге будут выполнять этап ... дважды." ссылка

Как вы заставляете maven MOJO выполняться только один раз в конце сборки? имеет несколько альтернатив @ aggregator.

1 голос
/ 12 марта 2014

Используя новый maven-plugin-annotations, вы также можете ввести:

@Component
private MavenSession session;

и позвонить session.getProjects() (Maven 3) или session.getSortedProjects() (2).

...