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>
Есть ли способ извлечь эту часть из всех профилей, поэтому нет необходимости повторять это для каждого профиля (и, возможно, ошибочно)?
Ответы
Ответ 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