为什么Maven Versions Plugin(版本:use-latest-versions)没有更新/更改-SNAPSHOT版本才能发布(无-SNAPSHOT版本)?

我使用
Version Maven Plugin插件
use-latest-versions功能将groupID = com.example *内部依赖版本更新到最新版本.这是使用Jenkins作为CI系统的一部分执行的.

当开发人员开始处理新功能时,他们会分支代码,在分支上工作,当新功能实现(或部分实现)时,代码将合并回主干(通常每周多次).

分支版本更新:

>使用“快照”配置文件.请参阅下面的pom.xml快照配置文件配置和Artifactory repo配置
>用于更新版本的命令:mvn -P snapshot -B版本:use-latest-versions版本:update-properties -Dincludes = com.example * -DexcludeReactor = false -DallowSnapshots = true …

中继版本更新:

>使用“生产”配置文件.请参阅下面的pom.xml生产配置文件配置和Artifactory配置
>用于更新版本的命令:mvn -P production -B版本:use-latest-versions版本:update-properties -Dincludes = com.example * -DexcludeReactor = false …

有时分支构建会将com.example *依赖版本更新为“…- SNAPSHOT”版本(这是正常的,因为libs-snapshot Artifactory repo用作可以具有-SNAPSHOT依赖版本的依赖库).这些版本更新将检查回源代码控制(svn).

当代码(包括pom.xml版本更新更改)从分支合并回主干并执行主干构建时,所有com.example *内部依赖版本都应更改/更新为最新版本.但由于某些原因,依赖版本在其版本中具有“-SNAPSHOT”:use-latest-versions不会将版本更改/更新为最新版本(无-SNAPSHOT)版本.

例:

Artifactory repos有流动的版本:

> libs-snapshot有“com.example:myLib:1.1.10-SNAPSHOT”,“com.example:myLib:1.1.11-SNAPSHOT”
> libs-release有“com.example:myLib:1.1.9”,“com.example:myLib:1.1.12”

使myApp分支构建将从libs-snapshot获取依赖版本并将com.example:myLib版本更新为1.1.11-SNAPSHOT并将此更新检查回SVN

...    
    <dependency>
        <groupId>com.example</groupId>
        <artifactId>myLib</artifactId>
        <version>1.1.11-SNAPSHOT</version>
    </dependency>
...

将代码合并回主干包括上述依赖版本更改并运行主干版本(包括版本更新)mvn -P production -B版本:use-latest-versions …不会将com.example:myLib版本更改为1.1. 12

工具配置:

>本地回购:libs-snapshot-local(开发存储库); libs-release-local(发布存储库)
>虚拟仓库:libs-snapshot(包括libs-snapshot-local,libs-release-local和remote-repos); libs-release(包括libs-release-local和remote repos)

pom.xml配置:

...
<profiles>
    <profile>
        <id>snapshot</id>
        <distributionManagement>
            <repository>
                <id>libs-snapshot-local</id>
                <name>Internal Applications Snapshot Repository</name>
                <url>http://example.com/artifactory/libs-snapshot-local</url>
            </repository>
        </distributionManagement>

        <repositories>
            <repository>
                <snapshots>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                </snapshots>
                <id>libs-snapshot</id>
                <name>libs-snapshot</name>
                <url>http://example.com/artifactory/libs-snapshot</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                </releases>
            </repository>
            <repository>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <id>libs-release</id>
                <name>libs-release</name>
                <url>http://example.com/artifactory/libs-release</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                </releases>
            </repository>
        </repositories>

        <build>
            ...
        </build>
    </profile>

    <profile>
        <id>production</id>

        <distributionManagement>
            <repository>
                <id>libs-release-local</id>
                <name>Internal Applications Snapshot Repository</name>
                <!-- Artifacts are promoted to libs-release-local not deployed directly -->
                <url>http://example.com/artifactory/libs-snapshot-local</url>
            </repository>
        </distributionManagement>

        <repositories>
            <repository>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
                <id>libs-release</id>
                <name>libs-release</name>
                <url>http://example.com/artifactory/libs-release</url>
                <releases>
                    <enabled>true</enabled>
                    <updatePolicy>always</updatePolicy>
                </releases>
            </repository>
        </repositories>

        <build>
            ...
        </build>
    </profile>

</profiles>

最佳答案 您应该确保使用的是最新版本的插件(2.3).我相信2.3
fixed some issues(据说它仍然是一个令人难以置信的错误插件).

我在版本插件中发现的另一个问题是与其他版本目标甚至其他maven目标相结合.不要那样做.例如,您上面的代码正在运行版本:use-latest-versions versions:update-properties.而是为每个目标执行一次mvn.是的,这是一个痛苦,并减慢了构建过程,但我发现它更可靠,特别是如果您使用版本:更新 – 父(2.3可能已修复这些问题).

我也认为excludeReactor is generally broken.如果你在聚合项目上运行版本更新我不推荐它.而是转到每个子模块并运行命令.

点赞