Maven профиль для одного модуля - PullRequest
8 голосов
/ 08 марта 2010

У меня есть многомодульный проект maven, который успешно собирается, я хотел бы собрать только один из моих модулей. Как бы я это сделал с профилями ? Я мог бы сделать это с консоли двумя способами: один путь - перейти к дочернему модулю и mvn package, или я мог бы использовать реактор для сборки только одного модуля.

Могу ли я сделать то же самое с профилями? Изменяя ПОМ? Спасибо

РЕДАКТИРОВАТЬ

Если это невозможно из POM, могу ли я сделать это из settings.xml?

Ответы [ 2 ]

13 голосов
/ 08 марта 2010

Чтобы реализовать это с профилями, вы можете использовать два профиля, один <activeByDefault> со всеми модулями и другой только с требуемым модулем. Как то так:

<profiles>
  <profile>
    <id>all</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <modules>
      <module>module-1</module>
      ...
      <module>module-n</module>
    </modules>
  </profile>
  <profile>
    <id>module-2</id>
    <modules>
      <module>module-2</module>
    </modules>
  </profile>
<profiles>

А затем назовите это так:

mvn -Pmodule-2 package

Здесь следует отметить две вещи:

  1. Вам необходимо переместить <modules> из POM в профиль «по умолчанию» (поскольку <modules> из профиля являются только аддитивными, они не скрывают модули, объявленные в POM).
  2. Отметив его как <activeByDefault>, будет выбран профиль «по умолчанию», если ничего не активно, но деактивирован, если что-то еще.

Можно даже параметризовать имя модуля и передать его как свойство:

<profiles>
  ...
  <profile>
    <id>module-x</id>
    <activation>
      <property>
        <name>module-name</name>
      </property>
    </activation>
    <modules>
      <module>${module-name}</module>
    </modules>
  </profile>
<profiles>

И вызвать Maven, как это:

mvn -Dmodule-name=module-2 package

Но это плохая реализация ИМХО, я предпочитаю -pl «продвинутые» варианты реактора (меньше xml, намного больше мощности и гибкости):

mvn -pl module-2 package
0 голосов
/ 18 декабря 2018

Чтобы преодолеть аддитивную природу maven по умолчанию <modules>, работающую с <profiles>, вы можете использовать реактор с определенным профилем, например ::10000 *

mvn -pl module-2 -Pprofile-name package

Будет упакован модуль-2, определенный в имени профиля, а не в профиле по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...