使用 mavens 属性过滤机制来保持属性文件同步

正如本文档所述

有时,资源文件需要包含只能在构建时提供的值。要在 Maven 中完成此操作,请使用语法 ${<property name>} 将包含值的属性引用到资源文件中。属性可以是 pom.xml 中定义的值之一,用户 settings.xml 中定义的值,外部属性文件中定义的属性或系统属性。

举个例子,让我们在 src/main/resources 中创建一个包含 pom 版本和构建时间的简单 info.txt

  1. 创建一个包含以下内容的 src/main/resources/info.txt

    version = $ {pom.version} build.date = $ {timestamp}

  2. 通过将 filtering 设置为 true,让 Maven 扩展属性:

     <build>
         <resources>
             <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
             </resource>
         </resources>
     </build>
    
  3. 有了这个,版本将会更新,但不幸的是,Maven 中的一个错误会阻止 ${maven.build.timestamp} 属性传递给资源过滤机制( 此处有更多信息 )。那么,让我们创建一个 timestamp 属性作为解决方法! 将以下内容添加到 pom 的属性中:

     <properties>
         <timestamp>${maven.build.timestamp}</timestamp>
         <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm</maven.build.timestamp.format>  
     </properties>
    
  4. 运行 maven,你应该在 target/classes 找到一个 info.txt,内容如下:

     version=0.3.2
     build.date=2017-04-20T13:56