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

Ula*_*kar 38 java maven-2 maven

我在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>
Run Code Online (Sandbox Code Playgroud)

题:

有没有办法从所有配置文件中提取这个部分,这样就不需要为每个配置文件重复它(并可能拼错它)?

alf*_*onx 34

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

${project.activeProfiles[0].id}
Run Code Online (Sandbox Code Playgroud)

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

使用

${project.profiles[0].id}
Run Code Online (Sandbox Code Playgroud)

帕斯卡的建议并没有为我工作.

提示:在调查时,我真的开始喜欢了mvn help:evaluate.

  • 使用`$ {project.activeProfiles [0] .id}`对我来说非常合适.您可以确保在一个配置文件的激活块中至少有一个配置文件处于活动状态,并且"<activeByDefault> true </ activeByDefault>". (3认同)
  • 同样,$ {project.activeProfiles [0] .id}工作,maven 3.2 (2认同)

Mik*_*e R 15

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

    <profile>
        <id>dev</id>
        <properties>
            <profile-id>dev</profile-id>
        </properties>
    </profile>
Run Code Online (Sandbox Code Playgroud)

然后用${profile-id}.

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

  • 为什么我看到一条蛇咬着它的尾巴? (4认同)

Pas*_*ent 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>
Run Code Online (Sandbox Code Playgroud)

要激活此配置文件,您可以在命令行中键入以下内容:

mvn groupId:artifactId:goal -Dprofile=profileId1 
Run Code Online (Sandbox Code Playgroud)