我正在将一些 Maven 项目从 Perforce 迁移到 git。使用 Perforce,这些项目配置了build.number
Maven 属性,作为构建过程的一部分作为 JVM arg 传入。使用 git,我正在探索基于 git repo 元数据设置属性的jgit-buildnumber 插件。
该插件运行良好,但即使我在 Maven 生命周期的早期运行它(验证或初始化),这也会发生在生成 Reactor 构建计划之后。这是一个问题,因为项目使用exec-maven-plugin
和maven-antrun-plugin
. 这些插件的构建计划似乎在计划构建时拍摄了所有 Maven 属性的快照,例如来自 Reactor 构建计划的调试输出中的一个片段:
[DEBUG] -----------------------------------------------------------------------
[DEBUG] Goal: org.codehaus.mojo:exec-maven-plugin:1.2.1:exec (RPMbuilderScript)
[DEBUG] Style: Regular
[DEBUG] Configuration: <?xml version="1.0" encoding="UTF-8"?>
<configuration>
<basedir default-value="${basedir}"/>
<classpathScope default-value="runtime">${exec.classpathScope}</classpathScope>
<commandlineArgs>product=jas_etl
dir=/Users/dev/project
team=sanctuary
version=${git.buildnumber}
artifact=/Users/dev/project/target/project-${git.buildnumber}.zip
</commandlineArgs>
<executable>../parent/devops_scripts/mavenRpmBuilder.sh</executable>
<longClasspath default-value="false">${exec.longClasspath}</longClasspath>
<outputFile>${exec.outputFile}</outputFile>
<project default-value="${project}"/>
<session default-value="${session}"/>
<skip default-value="false">true</skip>
<sourceRoot>${sourceRoot}</sourceRoot>
<testSourceRoot>${testSourceRoot}</testSourceRoot>
<workingDirectory>${exec.workingdir}</workingDirectory>
</configuration>
git.buildnumber
由 jgit-buildnumber 插件设置为初始化阶段的一部分,但为时已晚,无法影响 exec 插件构建计划中的引用。
有没有办法在生成构建计划之前运行 jgit-buildnumber 插件?或者,有没有办法将 Ant 和 exec 插件配置为仅在它们执行的阶段开始时读取属性值,而不是在生成构建计划时读取?