为部署配置 Maven 设置

Configure Maven settings for deployment

我想将工件从 Jenkins 部署到 Nexus 到不同的存储库(如 builds-allbuilds-verifiedreleases)。问题是我想在项目 POM 文件中保留最少的配置。我的设置文件现在看起来像:

<servers>
    <server>
        <id>orion-nexus</id>
        <username>admin</username>
        <password>password</password>
    </server>
</servers>

<localRepository>~/.m2/repository</localRepository>

<profiles>
    <!-- Deployment configuration for CI builds for mainline -->
    <profile>
        <id>build</id>
        <repositories>
            <repository>
                <id>builds-all</id>
                <url>http://orion-nexus:8081/</url>
                <snapshots>
                    <checksumPolicy>fail</checksumPolicy>
                </snapshots>
            </repository>
        </repositories>
    </profile>
</profiles>

项目 POM:

<distributionManagement>
    <repository>
        <id>orion-nexus</id>
        <layout>default</layout>
        <url><!-- how to avoid explicit URL? --></url>
    </repository>
</distributionManagement>

我想 运行 像 mvn -B -P build clean install deploy 一样部署。但是,我不明白如何避免在分发管理部分设置显式 URL 。我可以在设置文件中设置一个变量并将其传播到我的 POM 吗?

是否有此类工作流程的分步指南?

您可以在 settings.xml 上的 profile 中声明一个 属性,并在 <distributionManagement/> 配置中使用它的名称。

settings.xml

<profiles>
    <profile>
        <id>distmgt</id>
        <properties>
            <distUrl>scp://...</distUrl>
        <properties/>
    </profile>
</profiles>

pom.xml

<distributionManagement>
    <repository>
        <id>orion-nexus</id>
        <layout>default</layout>
        <url>${distUrl}</url>
    </repository>
</distributionManagement>

最后

mvn -P distmgt clean deploy

您可以使用 activation 来避免 -P build 参数。