当前位置: 首页 > 面试题库 >

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

巫懿轩
2023-03-14
问题内容

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

  • __为我们的开发人员 发布 存储库(包括已部署的源代码)
  • __我们开发人员的 快照 存储库(包括已部署的源代码)
  • 第三方发布 存储库(仅JAR + POM)
  • (并且很高兴拥有):第三方每晚构建的 第三方快照 存储库(仅JAR + POM)

问题是:在Jenkins /
Nexus世界中通常如何处理?我希望在Jenkins中有一个Job,可以“自动”处理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文档看来,似乎不可能在同一个构建生命周期中使用多个存储库,更不用说我们需要/不需要基于目标存储库的源这一事实。

我可以在Jenkins中使用Maven“目标和选项”创建Job,clean deploy -P third- party然后添加带有“默认”数据的Post-build操作-“将工件部署到Maven存储库”,但在这种情况下,快照将用于回购,而通过Jenkins
Maven Release Plug-
in
发布的人工制品仅进入一个存储库。

有什么可行的想法,如何在不使CI工作层次结构复杂化的情况下做到这一点?

提前致谢!


问题答案:

您只需在Nexus中处理所有操作即可。创建一个存储库目标,其中包含与预配置示例“除了源中的所有其他内容(Maven
2)”中使用的模式相似的模式,并使用另一种限制groupid,artifactid甚至版本的模式来进一步缩小目标范围。

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

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

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



 类似资料:
  • 我们有许多Java项目,它们是由Jenkins构建的。这些都部署到了我们自己的Nexus服务器上。问题是,我们需要向第三方提供这些库,但没有源代码。因此,对于每个项目,在Nexus中,我们有: 为我们的开发人员发布存储库(包括部署的源代码) 我们开发人员的快照存储库(包括部署的源代码) 第三方发布存储库(仅限JAR POM) (最好有):第三方快照存储库(仅限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