40

我在 a 中设置了配置文件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>

问题:

有什么方法可以从所有配置文件中提取此部分,这样就无需为每个配置文件重复它(并且可能拼写错误)?

4

3 回答 3

39

使用 maven 2.2.1 及更高版本,我能够使用以下方法获取第一个活动配置文件的 ID:

${project.activeProfiles[0].id}

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

使用

${project.profiles[0].id}

正如帕斯卡所建议的那样对我不起作用

提示:在调查这个的时候,我真的开始爱上了mvn help:evaluate

于 2011-04-28T16:47:49.220 回答
17

作为替代方案${project.activeProfiles[0].id}(这似乎不适用于旧版本的 maven),只需定义一个属性:

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

然后使用${profile-id}.

注意:只需确保默认情况下始终处于活动状态

于 2014-01-31T21:49:50.823 回答
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 
于 2010-01-06T11:05:29.543 回答