Профиль Maven для одного модуля

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

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

ИЗМЕНИТЬ

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


person ant    schedule 08.03.2010    source источник


Ответы (2)


Чтобы реализовать это с помощью профилей, вы можете использовать два профиля: один <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
person Pascal Thivent    schedule 08.03.2010
comment
@Pascal Thivent Просто великолепно .. Я не знаю, что сказать .. спасибо, m8, ты непревзойденный, когда дело доходит до maven - person ant; 08.03.2010
comment
Я согласен, что @Pascal - гений-мавен. Я бы также добавил, что чище использовать сборку реактора, чем настраивать несколько профилей. - person ; 14.11.2012

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

mvn -pl module-2 -Pprofile-name package

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

person morsik    schedule 18.12.2018