根据激活的 maven 配置文件更新 war 名称

Update war name based on activated maven profile

在我的 pom 中,我有两个配置文件。

  1. test1

  2. test2

现在我希望我的 war 名称根据激活的配置文件更改。

预期结果

test1 配置文件激活时,war 名称应为 prefix-test1.war
test1test2激活时,war名字应该是prefix-test1-test2.war.
no 配置文件被激活时,war name 应该是 prefix.war.

我的 POM 文件....

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>com.sbill</groupId>
      <artifactId>sbill-wrapper</artifactId>
      <version>0.0.1-SNAPSHOT</version>
   </parent>
   <packaging>war</packaging>
   <artifactId>executable</artifactId>
   <dependencies>
      <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
   </dependencies>
   <profiles>
      <profile>
         <id>test1</id>
         <properties>
            <rp.build.warname>test1</rp.build.warname>
         </properties>
      </profile>
      <profile>
         <id>test2</id>
         <properties>
            <rp.build.warname>test2</rp.build.warname>
         </properties>
      </profile>
   </profiles>
   <build>
      <finalName>prefix-${rp.build.warname}</finalName>
   </build>
</project>

现在如果我 运行 命令 mvn clean install war 名字是 prefix-null.war .如果我 运行 命令 mvn clean install -P test1,test2 war 名称是 prefix-test2.war

结果与预期不同。

首先,为了避免在没有配置文件时显示空值,我们可以为 属性 rp.build.warname 提供默认值,如 Setting default values for custom Maven 2 properties.

中所述

对于 运行 mvn clean install -P test1,test2 的情况,war 名称是 prefix-test2.war 因为 rp.build.warname 的值被覆盖了,你可以阅读 How are conflicting properties resolved if multiple profiles are activated了解更多详情。 为了有多个值,我们可以使用两个属性(rp.build.warname1rp.build.warname2)来代替。

以下pom.xml包括上述变化

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.sbill</groupId>
        <artifactId>sbill-wrapper</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <packaging>war</packaging>
    <artifactId>executable</artifactId>

    <!-- Provide default value here to avoid null in file name -->
    <properties>
        <rp.build.warname1/>
        <rp.build.warname2/>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

    </dependencies>

    <profiles>
        <profile>
            <id>test1</id>
            <properties>
                <rp.build.warname1>-test1</rp.build.warname1>
            </properties>

        </profile>

        <profile>
            <id>test2</id>
            <properties>
                <rp.build.warname2>-test2</rp.build.warname2>
            </properties>

        </profile>
    </profiles>   
    <build>
        <finalName>prefix${rp.build.warname1}${rp.build.warname2}</finalName>        
    </build> 

</project>