当前位置: 首页 > 知识库问答 >
问题:

将Maven工件部署到具有不同设置的多个存储库

拓拔稳
2023-03-14

我们有许多Java项目,它们是由Jenkins构建的。这些都部署到了我们自己的Nexus服务器上。问题是,我们需要向第三方提供这些库,但没有源代码。因此,对于每个项目,在Nexus中,我们有:

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

问题是:这在Jenkins /Nexus世界通常是如何处理的?我更喜欢在Jenkins有一个作业来“自动”处理CI构建和发布(人工制品部署)过程。目前我正在使用多个

[...]
<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文档来看,似乎无法在同一构建生命周期中使用多个存储库,更不用说我们需要/不需要基于目标repo的源。

我可以在Jenkins中创建一个作业,使用Maven的“目标和选项”:clean deploy-P third-party,然后添加构建后操作——“将工件部署到Maven repository”和“默认”数据,但在这种情况下,只有快照才能进入repo,通过Jenkins Maven发布插件发布的工件只能进入一个存储库。

有什么切实可行的想法吗?我如何做到这一点,而不使我们的CI工作层次结构过于复杂?

提前谢谢!


共有2个答案

子车文康
2023-03-14

在部署阶段,您可以使用Maven Vang插件将单个jar上传到远程位置。

公良照
2023-03-14

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

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

无需进行多次部署或类似的部署。。

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

 类似资料:
  • 问题内容: 我们有许多Java项目,这些项目是使用Jenkins构建的CI。这些都可以部署到我们自己的Nexus服务器上。问题是,我们需要将这些库提供给第三方,但没有源代码。因此,对于每个项目,在Nexus中,我们都有: __为我们的开发人员 发布 存储库(包括已部署的源代码) __我们开发人员的 快照 存储库(包括已部署的源代码) 第三方发布 存储库(仅JAR + POM) (并且很高兴拥有):

  • 需要根据特定环境从两个远程存储库部署工件。所以我尝试在pom.xml的分发管理中使用配置文件 尝试激活个人资料 我得到以下错误。 部署失败:存储库元素没有指定在POM内部分布管理元素或在-DaltDeploymentRepository=id::布局::url参数 似乎pom无法识别分发管理标签。 但它在没有单一分销管理的配置文件的情况下运行良好。 有谁能给点建议吗? 参考 设置Maven以允许轻

  • 我目前在一个我为很多人定义规则的环境中工作。我们目前使用Hudson和artiFactory,我想评估切换到Jenkins和Nexus是否值得迁移成本(但这不是问题)。 为了评估它,我在本地设置了Maven、Jenkins和Nexus,我试图找到一个设置来使用以前的设置,以便我可以比较解决方案。这里的问题是: > 注意:安装和用户配置不能用于添加共享项目信息,例如,设置或公司范围。 我们当前的根P

  • 我见过使用Maven构建和部署本机代码--但无法使这种(非常相似的)部署工作如我所愿… 我有一个用Maven和Maven CMake插件构建的C++项目。这涉及到几个Maven概要文件,为我在构建平台上使用的各种C++编译器选择正确的设置。(Windows 10、Ubuntu 16.04、Ubuntu 18.04、CentOS 7、Raspbian、macOS High Sierra)。我使用Je

  • 我有一个pom构建了一个jar,并使用rpm maven插件将其打包成rpm。jar既用作独立应用程序,也用作其他应用程序的依赖项,因此我需要将这两个构件部署到本地Nexus。我希望将jar部署到标准的maven releases/maven snapshots存储库中,但我希望将rpm部署到同一个Nexus中的另一个存储库中,该存储库仅用于我们的rpm。 我的专业知识相当基础,但我不知道如何做到

  • 我在POM. xml中引用了一个存储库来将ojdbc.jar添加到我的项目中,但是Maven(我使用STS插件)一直告诉我它找不到jar。 我在下面显示了我的存储库和jar依赖关系xml. 有人知道为什么找不到这个罐子吗?这是我的POM。xml设置不正确? 注意vaadin回购工作正常,因为vaadin罐被正确地添加到我的项目中。 下面是http://mvnrepository.com/artif