java - 将 Maven Artifact 部署到具有不同设置的多个存储库

标签 java maven jenkins nexus

我们有许多 Java 项目,它们是使用 Jenkins 构建的 CI。这些部署到我们自己的 Nexus 服务器上就好了。 问题是,我们需要将这些库提供给第三方,但没有源代码。 所以对于每个项目,在 Nexus 中我们有:

  • 为我们的开发人员发布存储库(包括已部署的源代码)
  • 快照 用于我们开发人员的存储库(包括已部署的源代码)
  • 第三方发布存储库(仅限 JAR + POM)
  • (最好有):第三方快照存储库(仅限 JAR + POM),用于第三方夜间构建

问题是:这在 Jenkins/Nexus 世界中通常是如何处理的?我更喜欢在 Jenkins 中有一个单独的工作来“自动”处理 CI 构建和发布(人工制品部署)过程。 目前我正在使用多个 <distributionManagement>我们的“主根 pom.xml”中的配置文件(包含在所有项目中):

[...]
<profiles>
    <profile>
        <id>default</id>
        <distributionManagement>
            <repository>
                <id>releases</id>
                <name>Release</name>
                <url>http://path/to/nexus/content/repositories/releases/</url>
            </repository>
            <snapshotRepository>
                <id>snapshots</id>
                <name>Snapshot</name>
                <url>http://path/to/nexus/content/repositories/snapshots/</url>
                <uniqueVersion>false</uniqueVersion>
            </snapshotRepository>
        </distributionManagement>
    </profile>
    <profile>
        <id>third-party</id>
        <distributionManagement>
            <repository>
                <id>releases</id>
                <name>Release</name>
                <url>http://path/to/nexus/content/repositories/third-party/</url>
            </repository>
            <snapshotRepository>
                <id>snapshots</id>
                <name>Snapshot</name>
                <url>http://path/to/nexus/content/repositories/third-party-snapshots/</url>
                <uniqueVersion>false</uniqueVersion>
            </snapshotRepository>
        </distributionManagement>
    </profile>
</profiles>

从 Maven 文档来看,似乎无法在同一个构建生命周期中使用多个存储库,更不用说我们需要/不需要基于目标存储库的源这一事实了。

我可以通过 Maven“目标和选项”在 Jenkins 中创建一个 Job:clean deploy -P third-party然后添加构建后操作 - 使用“默认”数据“将 Artifact 部署到 Maven 存储库” - 但在这种情况下,只有 SNAPSHOT 将同时用于通过 Jenkins Maven Release Plug-in 发布的 repo 和 Artifact 只进入一个存储库。

关于如何在不使我们的 CI 作业层次结构过于复杂的情况下执行此操作的任何实用想法?

提前致谢!

最佳答案

您可以在 Nexus 中处理这一切。创建一个存储库目标,其中包含一个类似于预配置示例“All but sources (Maven 2)”中使用的模式,并使用另一个限制 groupid、artifactid 甚至版本的模式进一步缩小该目标。

然后创建使用该存储库目标的权限,并将其分配给您希望拥有相应访问权限的用户或角色。

不需要进行多次部署或类似的..

参见 http://books.sonatype.com/nexus-book/reference/repository-targets.html

关于java - 将 Maven Artifact 部署到具有不同设置的多个存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564180/

相关文章:

java.net.InetAddress 不适用于 GAE 免费层

java - Java 中的局部变量 VS 全局变量

java - pom.xml 中的 Maven 部署参数

selenium - Jenkins 未运行 TestNG 测试

python-3.x - 如何在运行 pytest 测试之前安装 python 插件?

JAVA RESTFull服务器获取POST数据,其中 "%"(百分比)作为值@FormParam

java - Java 8 是否提供了一种根据特定条件重复功能的好方法?

Jenkins 在重新启动或从磁盘重新加载配置时删除作业

eclipse - 从本地存储库添加依赖项 - m2e

java - java maven 项目中的 stanford NLP API 错误