Подтвердить что ты не робот

Maven - Могу ли я ссылаться на идентификатор профиля в определении профиля?

В pom.xml я установил o таких профилей:

<profile>
<id>profileId1</id>
    <build>
        <filters>
            <filter>src/main/filters/profileId1.properties</filter>
        </filters>
// rest of the profile 
</profile>
<profile>
<id>profileId2</id>
    <build>
        <filters>
            <filter>src/main/filters/profileId2.properties</filter>
        </filters>
// rest of the profile
</profile>

Есть ли способ извлечь эту часть из всех профилей, поэтому нет необходимости повторять это для каждого профиля (и, возможно, ошибочно)?

4b9b3361

Ответ 1

С maven 2.2.1 и более поздними версиями я смог получить идентификатор первого активного профиля, используя:

${project.activeProfiles[0].id}

Конечно, это не удается, если нет ни одного активного профиля.

Используя

${project.profiles[0].id}

как предложил Паскаль, для меня работала не.

Подсказка: исследуя это, я действительно начал любить mvn help:evaluate

Ответ 2

В качестве альтернативы ${project.activeProfiles[0].id} (который, похоже, не работает в более старых версиях maven), просто определите свойство:

    <profile>
        <id>dev</id>
        <properties>
            <profile-id>dev</profile-id>
        </properties>
    </profile>

Затем используйте ${profile-id}.

Примечание: просто убедитесь, что по умолчанию всегда активен

Ответ 3

Согласно PLXUTILS-37, должно быть возможно получить доступ к свойствам в списке или карте, используя "Свойства отражения" (см. раздел MavenPropertiesGuide для получения дополнительной информации об этом).

Так что просто попробуйте ${project.profiles[0].id}, ${project.profiles[1].id} и т.д.

Если это не работает (я не проверял, если это так), я бы использовал активацию профиля на основе системного свойства, как описано в Введение в сборку профилей и использование этого свойства в фильтре. Что-то вроде этого:

<profile>  
  <id>profile-profileId1</id>  
  <activation>
    <property>
      <name>profile</name>
      <value>profileId1</value>
    </property>
  </activation>
  <build>  
    <filters>  
      <filter>src/main/filters/${profile}.properties</filter>  
    </filters>  
    // rest of the profile  
</profile>

Чтобы активировать этот профиль, введите его в командной строке:

mvn groupId:artifactId:goal -Dprofile=profileId1