我在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>
问题:
有没有办法从所有配置文件中提取这个部分,这样就不需要为每个配置文件重复它(并且可能拼错它)?
答案 0 :(得分:34)
使用maven 2.2.1及更高版本,我可以使用以下方式获取第一个活动配置文件的ID:
${project.activeProfiles[0].id}
当然,如果没有至少一个活动配置文件,则会失败。
使用
${project.profiles[0].id}
根据Pascal的建议不为我工作。
提示:在调查此事时,我真的开始喜欢mvn help:evaluate
。
答案 1 :(得分:14)
作为${project.activeProfiles[0].id}
的替代品(它似乎不适用于旧版本的maven),只需定义一个属性:
<profile>
<id>dev</id>
<properties>
<profile-id>dev</profile-id>
</properties>
</profile>
然后使用${profile-id}
。
注意:只需确保默认情况下始终处于活动状态
答案 2 :(得分:3)
根据PLXUTILS-37,应该可以使用“反射属性”访问列表或地图中的属性(有关详细信息,请参阅MavenPropertiesGuide)。
所以,只需尝试${project.profiles[0].id}
,${project.profiles[1].id}
等
如果这不起作用(我没有检查它是否有效),我将根据Introduction to build profiles中所述的系统属性使用配置文件激活,并在过滤器中使用该属性。这样的事情:
<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