根据激活的Maven配置文件更新战争名称 - java

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

测试1
测试2

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

预期结果

激活test1配置文件后,战争名称应为prefix-test1.war
激活test1test2时,战争名称应为prefix-test1-test2.war
如果没有激活任何配置文件,则战争名称应为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,则战争名称为prefix-null.war
。如果我运行命令mvn clean install -P test1,test2,则战争名称为prefix-test2.war

结果与预期不同。

java参考方案

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

对于运行mvn clean install -P test1,test2的情况,战争名称为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>

合并List <T>和List <Optional <T >> - java

鉴于: List<Integer> integers = new ArrayList<>(Arrays.asList( 10, 12 )); List<Optional<Integer>> optionalIntegers = Arrays.asList( Optional.of(5), Optional.em…

实例化类型<?>的泛型类 - java

我正在为SCJP / OCPJP学习,并且遇到了一个对我来说很奇怪的示例问题。该示例代码实例化了两个通用集合:List<?> list = new ArrayList<?>(); List<? extends Object> list2 = new ArrayList<? extends Object>(); …

展平地图中的列表列表 - java

我有订单流(来源是订单列表)。每个订单都有一个客户和一个OrderLine列表。我要实现的目标是在一张简单的列表中以客户为关键的地图,并将属于该客户的所有订单行作为值。现在,通过执行以下操作,我现在管理的内容返回了Map<Customer>, List<Set<OrderLine>>>:orders .collect…

如何告诉Checker遗留方法将接受Nullable类型? - java

考虑一下:@Nullable Object obj = null; Optional<Object> optional = Optional.ofNullable(obj); 这会失败,因为检查器框架假定ofNullable无法接受null值(毕竟,其参数未标记为@Nullable)。有没有办法告诉Checker-framework这个方法(或我…

具有相同基类的泛型 - java

我有一个这样定义的TreeNode类:class TreeNode<T extends MyClass> { public T element; public TreeNode<? extends MyClass> parent; public ArrayList<TreeNode<? extends MyClass>…