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

Я установил профили в pom.xml, как показано ниже:

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

Вопрос:

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

Ответы [ 3 ]

34 голосов
/ 28 апреля 2011

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

${project.activeProfiles[0].id}

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

Использование

${project.profiles[0].id}

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

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

14 голосов
/ 01 февраля 2014

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

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

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

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

3 голосов
/ 06 января 2010

Согласно 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 
...