我正在尝试在 Maven 在
META-INF/maven/${groupId}/${artifactId}
位置生成的 pom.properties 文件中添加自定义值
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifestEntries>
<build>${BUILD_TAG}</build>
</manifestEntries>
<addMavenDescriptor>true</addMavenDescriptor>
<pomPropertiesFile>${project.build.directory}\interface.properties</pomPropertiesFile>
</archive>
</configuration>
</plugin>
interface.properties文件的内容是
# Build Properties
buildId=746
使用文档我已将
pomPropertiesFile
元素指向外部属性,但运行后生成的pom.properties文件仍然具有默认内容mvn install
pomPropertiesFile
元素的正确用法是什么?
编辑
我认为问题出在 org.apache.maven.archiver.PomPropertiesUtil 上。如果您查看
source中的方法
sameContents
,如果外部文件中的属性与默认值相同,则返回 true;如果不同,则返回 false。如果 sameContents
的结果为 false,则忽略外部文件的内容。
果然,这已经被记录为错误
我认为你需要在 src/main/resources/META-INF/${groupId}/${artifactId}/interface.properties 下放置一个文件,并让 maven 执行过滤工作(配置过滤)。该文件将自动复制到 target/META-INF/maven/${groupId}/${artifactId}/ 位置。
参见 https://issues.apache.org/jira/browse/MNG-4998
Maven 3 在读取 pom.xml 时将立即解析属性占位符以获取此时可用的所有属性值。稍后修改这些属性不会影响 pom.xml 中已解析的值。
但是,如果属性值不可用(没有默认值),则占位符将不会被该值替换,并且稍后仍可以将其作为占位符进行处理。例如,如果插件将在构建过程中生成某些属性,或者如果插件在某个构建步骤中读取并处理占位符。