Maven - 我可以在配置文件定义中引用配置文件ID吗?

时间:2010-01-06 10:23:57

标签: java maven-2 maven

我在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 个答案:

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