Как сохранить активными профили Maven, даже если активирован другой профиль? - PullRequest
96 голосов
/ 15 марта 2011

В моем файле pom.xml есть профиль, который всегда должен быть активным, если он явно не деактивирован (-P! FirstProfile). Я решил это с помощью флага activeByDefault:

<profiles>
  <profile>
    <id>firstProfile</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    ...
  </profile>
</profiles>

Теперь в том же файле pom.xml у меня есть второй профиль, который должен быть активным, только если профиль действительно активирован (-P secondProfile). Поэтому поведение по умолчанию: firstProfile active, secondProfile неактивно. В какой-то другой момент я хотел бы активировать второй профиль в дополнение к первому. Теперь проблема в том, что если я сделаю это с «-P secondProfile», то, к сожалению, firstProfile будет деактивирован. Документация Maven гласит:

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

Есть ли какая-то возможность, как сохранить первый активный профиль всегда активным (не объявляя его в файле settings.xml)?

Ответы [ 5 ]

136 голосов
/ 20 сентября 2011

Одна хитрость заключается в том, чтобы избежать activeByDefault и вместо этого активировать профиль при отсутствии свойства, например:

<profiles>
  <profile>
    <id>firstProfile</id>
    <activation>
      <property>
        <name>!skipFirstProfile</name>
      </property>
    </activation>
    ...
  </profile>
</profiles>

После этого вы сможете деактивировать профиль с помощью -DskipFirstProfile или с -P !firstProfile, но в противном случае профиль будет активным.

См .: Maven: полный справочник, активация профиля - активация при отсутствии свойства

21 голосов
/ 15 марта 2011

Хотелось бы, чтобы была такая возможность, я часто упускал ее. Единственная актуальная проблема JIRA, которую я смог найти, это:

MNG-4917: профиль не активен, хотя для activeByDefault установлено значение true

И это было решено как Not A Problem.

Я перестал использовать activeByDefault, потому что такой подход «все или ничего» сделал его бесполезным для меня.


Единственный способ изменить это поведение - написать собственную замену для DefaultProfileSelector, зарегистрировать ее как компонент сплетения с помощью @Component( role = ProfileSelector.class ) и поместить ее в ${MAVEN_HOME}/lib/ext (так будет выбран в качестве выбора профиля по умолчанию). (Если вы используете Maven 3.0.2 или старше, вам также придется отредактировать ${MAVEN_HOME}/bin/m2.conf, чтобы загрузить lib/ext до его загрузки lib)

5 голосов
/ 15 сентября 2016

Этот вопрос древний, но, похоже, проблему можно решить, используя activeProfile вместо activeByDefault.Я на Maven 3.3.9, но решение может работать на более ранних версиях.

Просто перечислите свои activeProfiles в вашем settings.xml, например:my-awesome-profile У меня есть настройки, такие как URL базы данных и т. Д., Поэтому они всегда применяются.Здесь я активирую второй профиль, resolve-from-central:

$ mvn help:all-profiles -P resolve-from-central 
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Stub Project (No POM) 1
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:all-profiles (default-cli) @ standalone-pom ---
[INFO] Listing Profiles for Project: org.apache.maven:standalone-pom:pom:1
  Profile Id: resolve-from-central (Active: true , Source: settings.xml)
  Profile Id: my-awesome-profile (Active: true , Source: settings.xml)
  Profile Id: resolve-from-internal (Active: false , Source: settings.xml)

Обратите внимание, что my-awesome-profile все еще активен.Ура!

3 голосов
/ 09 июня 2011

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

-P профиль-1, профиль-2

maven был разработан, чтобы разрешить автоматическую активацию нескольких профилей, однако если вы переопределите это с помощью -P, то будут активированы только профили, перечисленные в параметре.

0 голосов
/ 10 мая 2016

Вы не можете сохранить профиль по умолчанию активным, но вы можете взять содержимое этого профиля (в вашем примере ...) и просто переместить его в основной раздел pom.

Простопоскольку вы используете профили, это не означает, что все, что вы делаете, должно быть в профиле.

...