2010-01-06 114 views
34

在pom.xml中我已经集合O配置文件是这样的:Maven - 我可以在配置文件定义中引用配置文件ID吗?

 
<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> 

有什么办法,我可以提取这一块的所有配置文件,所以没有必要重复这对于每一个配置文件(也可能拼错它)?

回答

2

根据PLXUTILS-37,应该可以使用“反射属性”(请参阅​​MavenPropertiesGuide了解更多信息)访问列表或地图中的属性。

所以只是尝试${project.profiles[0].id}${project.profiles[1].id}

如果这不起作用(我没有检查,如果它),我会使用配置文件激活基于在Introduction to build profiles描述的系统性能和在过滤器中使用该属性。类似的东西:

​​

要激活此配置文件,您可以在命令行中输入:

mvn groupId:artifactId:goal -Dprofile=profileId1 
29

与Maven 2.2.1或更高版本,我能拿到第一的ID活动配置文件使用:

${project.activeProfiles[0].id} 

当然,如果没有至少一个活动配置文件,则会失败。

使用

${project.profiles[0].id} 

由帕斯卡尔建议做为我工作。

提示:在调查这个,我才真正开始喜欢mvn help:evaluate

+2

使用'$ {project.activeProfiles [0] .ID}'完全为我工作。您可以确保至少有一个配置文件在一个配置文件的激活块中使用' true'激活。 – SimonB 2012-02-14 11:03:14

+1

同样在这里,$ {project.activeProfiles [0] .id}起作用,maven 3.2 – chrismarx 2016-06-13 14:56:58

+0

出于某种原因,它不会提取父pom属性;因此,例如,如果激活2个配置文件,其中一个配置文件来自父项,则只会检索当前项目属性。 – ftkg 2016-12-08 18:08:52

11

至于${project.activeProfiles[0].id}替代(这似乎并没有工作在旧版本的Maven的),只是定义属性:

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

然后使用${profile-id}

注:只要确保一个始终处于活动状态默认

+3

为什么我看到蛇咬尾巴? – 2016-03-10 12:19:26

相关问题