根据激活的 maven 配置文件更新 war 名称
Update war name based on activated maven profile
在我的 pom 中,我有两个配置文件。
test1
test2
现在我希望我的 war 名称根据激活的配置文件更改。
预期结果
当 test1
配置文件激活时,war 名称应为 prefix-test1.war
。
当test1
和test2
激活时,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.warname1
,rp.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>
在我的 pom 中,我有两个配置文件。
test1
test2
现在我希望我的 war 名称根据激活的配置文件更改。
预期结果
当 test1
配置文件激活时,war 名称应为 prefix-test1.war
。
当test1
和test2
激活时,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.warname1
,rp.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>