maven 部署nexus_Maven部署到Nexus

本文详细介绍了如何配置Maven项目以将工件部署到Nexus存储库,包括在pom.xml中设置distributionManagement,使用nexus-staging-maven-plugin插件,以及在全局Maven设置.xml中管理部署凭据。
摘要由CSDN通过智能技术生成

maven 部署nexus

1.概述

上一篇文章中 ,我讨论了Maven项目如何在本地安装尚未部署在Maven Central(或任何其他大型且公共托管的存储库)上的第三方jar。 该解决方案仅适用于小型项目,在这些项目中安装,运行和维护完整的Nexus服务器可能会显得过大。 但是,随着项目的发展,Nexus很快成为托管第三方工件以及在开发流中重用内部工件的唯一真正成熟的选择。 本文将展示如何使用Maven将项目工件部署到Nexus

2. pom中的Nexus要求

为了使Maven能够部署在构建的打包阶段中创建的工件,它需要通过distributionManagement元素定义存储信息,以在其中存储打包的工件

<distributionManagement>
   <snapshotRepository>
      <id>nexus-snapshots</id>
      <url>http://localhost:8081/nexus/content/repositories/snapshots</url>
   </snapshotRepository>
</distributionManagement>

托管的公共Snapshots存储库在Nexus上是开箱即用的,因此无需进一步创建或配置任何内容。 Nexus使确定其托管存储库的URL变得容易-每个存储库都显示要添加到项目pom的<distributionManagement>中“ 摘要”选项卡下的确切条目。

3.插件

默认情况下,Maven通过maven-deploy-plugin处理部署机制-这映射到默认Maven生命周期的部署阶段:

<plugin>
   <artifactId>maven-deploy-plugin</artifactId>
   <version>2.7</version>
   <executions>
      <execution>
         <id>default-deploy</id>
         <phase>deploy</phase>
         <goals>
            <goal>deploy</goal>
         </goals>
      </execution>
   </executions>
</plugin>

maven-deploy-plugin是解决将项目部署到Nexus的任务的可行选择,但是它并不是为了充分利用Nexus提供的功能而构建的。 因此,Sonatype构建了一个Nexus专用插件-nexus-staging-maven-plugin-插件实际上旨在充分利用Nexus必须提供的更高级的功能-分期等功能。

尽管对于简单的部署过程,我们不需要暂存功能,但我们将继续使用此自定义Nexus插件,因为该插件的创建明确目的是与Nexus良好地沟通。 使用maven-deploy-plugin的唯一原因是在将来保持打开使用Nexus替代产品的选项,例如Artifactory存储库。 但是,与在项目的整个生命周期中可能实际更改的其他组件不同,Maven存储库管理器极不可能更改,因此不需要灵活性。 因此,在部署阶段使用另一个部署插件的第一步是禁用现有的默认映射:

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-deploy-plugin</artifactId>
   <version>${maven-deploy-plugin.version}</version>
   <configuration>
      <skip>true</skip>
   </configuration>
</plugin>

现在,我们可以定义:

<plugin>
   <groupId>org.sonatype.plugins</groupId>
   <artifactId>nexus-staging-maven-plugin</artifactId>
   <version>1.3</version>
   <executions>
      <execution>
         <id>default-deploy</id>
         <phase>deploy</phase>
         <goals>
            <goal>deploy</goal>
         </goals>
      </execution>
   </executions>
   <configuration>
      <serverId>nexus</serverId>
      <nexusUrl>http://localhost:8081/nexus/</nexusUrl>
      <skipStaging>true</skipStaging>
   </configuration>
</plugin>

插件的部署目标映射到Maven构建的部署阶段。 还要注意, 如前所述,在将-SNAPSHOT工件简单部署到Nexus时,我们不需要分段功能,因此可以通过<skipStaging>元素将其完全禁用。

4.全局

部署到Nexus是一项安全的操作 -为此,在任何Nexus实例上都存在开箱即用的部署用户。 无法使用该部署用户的凭据来配置Maven,以便它可以与Nexus正确交互,这不能在项目的pom.xml中完成。 这是因为pom的语法不允许这样做,更不用说pom可能是公共工件的事实,因此不太适合保存凭证信息。

服务器的凭证必须在全局Maven setting.xml中定义:

<servers>
   <server>
      <id>nexus-snapshots</id>
      <username>deployment</username>
      <password>the_pass_for_the_deployment_user</password>
   </server>
</servers>

还可以让服务器使用基于密钥的安全性,而不是原始和纯文本凭据。

5.部署过程

执行部署过程很简单:

mvn clean deploy -Dmaven.test.skip=true

在部署作业的上下文中,跳过测试是可以的,因为该作业应该是项目的部署基准线中的最后一个作业。 这种部署管道的一个常见示例是一连串的Jenkins作业,每个作业只有在成功完成后才触发下一个作业。 因此,管道中的先前作业有责任运行项目中的所有测试套件-到部署作业运行时,所有测试都应该已经通过。

如果只运行一个命令,则可以在部署阶段执行之前使测试保持活动状态以运行:

mvn clean deploy

六,结论

这是将Maven工件部署到Nexus的简单但高效的解决方案。 它也有些怪异-使用nexus-staging-maven-plugin代替默认的maven-deploy-plugin ; 分段功能被禁用等-正是这些选择使解决方案变得简单实用。 潜在地激活全部登台功能可能是将来文章的主题。 最后,我们将在下一篇文章中讨论发布过程。

参考:来自badung博客的JCG合作伙伴 Eugen Paraschiv的Maven Deploy to Nexus

翻译自: https://www.javacodegeeks.com/2013/05/maven-deploy-to-nexus.html

maven 部署nexus

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值