在Maven发布期间丢失的属性:执行

RCr*_*oss 7 teamcity system-properties maven maven-release-plugin

我正在从TeamCity运行maven构建并使用build.vcs.number将Subversion修订版写入我的清单.在使用Subversion作为VCS的任何Maven构建中,TeamCity补充道

-Dbuild.vcs.number=1234
Run Code Online (Sandbox Code Playgroud)

到maven命令行,其中1234是正在构建的分支中的最新修订版.

然后在我的pom.xml中,我有

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
            </manifest>
            <manifestEntries>
                <build>${build.vcs.number}</build>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

这一切都正常,直到我运行Maven release:perform(也来自TeamCity),此时$ {build.vcs.number}变为null,即使我在TeamCity构建日志中可以看到该属性是在命令中传入的线.

maven-release-plugin文档暗示Maven在执行目标期间的某个时刻运行分叉进程 - 这就是我遇到问题的原因吗?

有没有办法可以确保将此特定属性传递给该分叉进程?

Ste*_*lly 5

-Darguments=-Dbuild.vcs.number=1234
Run Code Online (Sandbox Code Playgroud)

有一个用于释放的分叉进程,以确保它具有干净的可重现命令行,因此您需要指定要传递的内容.

理想情况下,您在Pom上配置发布插件以通过属性,但是没有使用覆盖(除非有人已经禁用了Pom中的覆盖...它们会被卡住,直到您重新启用它为止.

注意:如果有多个属性或属性包含空格,请密切注意引用