`
13594135
  • 浏览: 193481 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

maven 中 部署构件至Nexus(mvn deploy)

阅读更多
1.在要部署的pom下添加如下命令
 
<distributionManagement>
		<repository>
			<id>releases</id>
			<name>Local Nexus Repository</name>
			<url>http://127.0.0.1:8081/nexus/content/repositories/releases/</url>
		</repository>
		<snapshotRepository>
			<id>Snapshots</id>
			<name>Local Nexus Repository</name>
			<url>http://127.0.0.1:8081/nexus/content/repositories/snapshots</url>
		</snapshotRepository>
	</distributionManagement>


其中url地址要指向Nexus中的实际地址,repository的id与settings.xml中的文件中servers中节点一样。
 <servers><server>
		<id>releases</id>
		<username>admin</username>
		<password>123admin</password>
		</server>
		<server>
		<id>Snapshots</id>
		<username>admin</username>
		<password>123admin</password>
		</server> 
  </servers>

引用
怎样使用deploy命令部署构件到nexus服务器上可以参考经典的《Maven Definitive Guide》(Maven操作指南),书中的16.7节里面讲解的非常详细。假设我们在项目pom.xml文件中对maven服务器的设置信息如下:

<distributionManagement>
      <repository>
          <id>nexus-releases</id>
          <name>Local Nexus Repository</name>
          <url>http://192.168.1.99:8081/content/repositories/releases</url>
      </repository>
      <snapshotRepository>
          <id>nexus-snapshots</id>
          <name>Local Nexus Repository</name>
          <url>http://192.168.1.99:8081/content/repositories/snapshots</url>
      </snapshotRepository>
  </distributionManagement>
里我要说的是在使用的过程中遇到的几个都是“Failed to transfer file”错误,错误信息如下格式:

rror deploying artifact: Failed to transfer file:… Return code is:4xx

就是说前面错误的信息都是一样的,只是后面返回的HTTP状态数字不同。

. Return code is: 405
这个问题害我查了两个多小时才发现错误的根源,简单的错误就是在Maven执行到上传文件到服务器的时候出现一个HTTP 405错误。开始的时候总以为是Maven本身的问题,所以在这个上面浪费了不少时间。后来仔细查了405错误的含义是“用来访问本页面的 HTTP 方法不被允许”,最后终于发现是因为前面repository的地址写错了,或者是端口写错,或者是地址中的某个单词拼错了,反正原因就是repository的地址写错了。

. Return code is: 401或者Return code is: 403
其实403错误就是“禁止访问”的含义,所以问题的根源肯定在授权上面。Maven在默认情况下会使用deployment帐号(默认密码deploy)登录的系统,但是关键的Nexus中Releases仓库默认的Deployment Policy是“Disable Redeploy”,所以无法部署的问题在这个地方,方法是将其修改为“Allow Redeploy”就可以了。


这里还没有结束,因为如果直接按照上面的设置的话会有一个安全问题,那就是这样所有的开发人员都可以将构件部署到Nexus的releases仓库中了,时间长了会导致这个仓库中非常乱,这也应该是nexus为什么默认情况下将Release仓库的发布权限关闭的原因了。解决这个问题的整体思路就是在部署构件的时候需要使用用户名和密码登录,操作如下:
(1) 首先将Releases仓库默认的Deployment Policy修改为“Allow Redeploy”;
(2) 然后在右边的Security下面的Users中,修改deployment帐号的密码,方法是在帐号上右键,然后选择“Set Password”(PS:这个操作我找了好久,后来无意中右键才找到,呵呵~~);

(3) 这个时候如果直接执行 mvn deploy 命令的话就又会出现401错误,还有一步就是将密码设置到Maven settings.xml中。打开settings.xml文件(${user.home}/.m/settings.xml或%{m2_home}/conf/settings.xml),找到<servers>,然后修改信息如下:

<server>
      <id>releases</id>
      <username>deployment</username>
      <password>deploydv89</password>
    </server>
 
    <server>
      <id>snapshots</id>
      <username>deployment</username>
      <password>deploydv89</password>
   </server>
里需要特别说明一句的是里面的id必须和你在项目pom.xml文件中distributionManagement下面设置的仓库id一致!当然了,这个里面你也可以设置admin帐号,或者参照deployment的权限手动添加新的帐号等等都是可以的。

然,问题到这里已经得到了比较完美的解放,但是如果有人还要较真的话会想到帐号的密码直接放到配置文件里面不是很安全。其实只要这里不建议放admin帐号,而deployment是无法登录的。如果非要更安全一些的话,也可以使用Maven 2.1.0之后所提供的密码加密功能,操作的步骤如下:
(1) 使用“mvn –encrypt-master-password xxx”或“mvn –emp xxx”创建一个主密钥,后面的xxx就是你所要设置的密钥的内容,这个密钥主要用于后面加密密码来用的;命令执行之后会产生一个类似{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}形式的字符串。
(2) 在${user.home}/.m/目录下创建一个名为settings-security.xml文件,我们将刚刚产生的主密钥放到这个文件中,文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<settingsSecurity>
    <master>{jSMOWnoPFgsHVpMvz5VrIt5kRbzGpI8u+9EF1iFQyJQ=}</master>
</settingsSecurity>
意,这个settings-security.xml文件一定要放在${user.home}/.m/目录下面,而不能放在${m2_home}/conf目录下!
(3) 使用“mvn –encrypt-password xxx”或“mvn –ep xxx”命令对帐号的密码进行加密,后面的xxx就是帐号的密码,加密之后依然会产生一个“{xxx}”形式的字符串,将这个字符串替换上面settings.xml文件中的server下面的password节点内容即可。
还有一种更安全的方式,就是将主密钥放到U盘里面,具体的操作可以看下面的参考资料。

. Return code is: 400
400错误的含义是“错误的请求”,在这里的原因是往往是没有部署到nexus的仓库中。nexus的repository分三种类型:Hosted、Proxy和Virtual,另外还有一个repository group(仓库组)用于对多个仓库进行组合。部署的时候只能部署到Hosted类型的仓库中,如果是其他类型就会出现这个400错误。

有一种情况也会出现400错误,就是默认情况下部署构件到Releases仓库中有时也会出现400错误,这个原因就像上面提到的那样,Nexus中Releases仓库默认的Deployment Policy是“Disable Redeploy”,所以无论你在settings.xml文件中将server的username设置为deployment还是使用admin都是无法部署的,就会出现这个400错误。这个问题也困扰了我好长时间,而且我还看到网上有人说admin没有部署构件的权限,这个是不对的。修改的方法可以参考上面第2条的做法。

分享到:

相关推荐

    maven 私服 nexus3 安装包

    2. **部署构件**:通过 Maven 的 deploy 命令,可以直接将本地的 JAR 包部署到 Nexus 托管仓库,如: ``` mvn deploy:deploy-file -Durl=file:///path/to/nexus/content/repositories/my-repo -Dfile=my-artifact....

    Maven deploy到 nexus(csdn)————程序.pdf

    通过以上步骤,我们可以有效地利用Maven将项目构件部署到Nexus中。这不仅提高了项目的构建效率,也便于团队成员之间的协作和版本管理。同时,正确区分快照库和发布库对于确保项目稳定性和可维护性至关重要。希望本文...

    nexus构建maven仓库总结(完善版2)

    “mvn deploy”则将项目部署到远程仓库,如Nexus。 在Nexus中发布自定义构件,通常需要先在Maven项目中配置pom.xml文件,明确项目的版本、打包类型等信息,然后通过“mvn deploy”命令上传到Nexus。Nexus还提供了...

    maven结合nexus部署文档

    首先,需要在 Nexus 界面中创建一个 hosted 仓库,然后通过 Maven 的 `deploy:deploy-file` 目标将 JAR 包上传。 **六、总结** 通过 Maven 与 Nexus 的结合使用,开发者可以更高效地管理项目依赖,同时方便地发布...

    Maven安装部署.docx

    - **生命周期管理**: Maven 提供了诸如 `mvn clean` 清理项目,`mvn compile` 编译源代码,`mvn test` 运行测试,`mvn package` 打包项目,`mvn deploy` 部署等命令。 - **依赖管理**: 在 `pom.xml` 中声明依赖,...

    nexus使用+Maven仓库管理

    部署构件至Nexus的过程,通常是在Maven项目的构建过程中通过执行`mvn deploy`命令完成。这要求在项目的POM文件中配置正确的仓库信息,包括ID、名称和URL,以及确保构建的项目能够被正确地上传到Nexus中对应的仓库...

    Maven deploy配置方法详解

    Maven deploy 是 Maven 生命周期的一部分,负责将项目的构件部署到远程仓库中,以便其他开发者和工程共享。下面将详细介绍 Maven deploy 配置方法。 pom.xml 配置 在 pom.xml 文件中,需要在 project 标签下添加 ...

    【maven】Nexus使用

    - **部署命令**:使用`mvn deploy`命令将工件发布到Nexus。 6. **Nexus的高级功能** - **搜索与浏览**:通过Nexus的Web界面可以搜索和浏览仓库中的所有构件。 - **清理策略**:可以设置自动清理过期或无用的构件...

    Nexus 私服之三“Maven 与 Nexus 协同工作”

    在IT行业中,构建和管理软件项目时,Maven和Nexus是两个至关重要的工具。本文将深入探讨如何在日常开发中让Maven与Nexus协同工作,以优化Java项目的构建流程,提高团队效率。 首先,Maven是一个强大的项目管理和...

    Maven Nexus配置

    在`pom.xml`文件中配置部署目标和相关的部署策略,然后通过`mvn deploy`命令执行部署操作。 6. **Nexus监听端口** - Nexus运行在默认的8081端口,但可以根据需求通过修改配置文件(如`etc/nexus.properties`)来...

    maven nexus-2.11.3-01-bundle.zip

    在软件开发过程中,依赖管理是至关重要的环节,Maven作为Java项目的主要构建工具,其依赖管理功能强大,而Nexus则是Maven的一个优秀辅助工具,它提供了私有仓库的功能,帮助团队更有效地管理和分发依赖。本文将详细...

    maven Nexus私服

    3. 部署构件:运行“mvn deploy”命令,Maven会将项目打包并上传到Nexus的私有仓库。 五、使用私有仓库 1. 更新settings.xml:在Maven的全局或用户设置文件settings.xml中,配置mirrors或profiles,将Nexus作为镜像...

    Linux下利用nexus搭建maven私服

    - 使用Maven的`deploy`命令,可以将构建的工件部署到Nexus的Hosted Repository。例如,`mvn deploy`命令会自动将项目打包并上传到指定的Nexus仓库。 6. **维护与安全** - 对于生产环境,应该为Nexus设置SSL,以...

    maven私服(nexus)配置(setting,pom.xml)

    在实际开发中,有时我们需要自建一个私有的Nexus仓库,以替代默认的Maven中央仓库,以便更好地管理依赖、提高下载速度并保护内部构件的隐私。本文将详细介绍如何配置Maven以使用Nexus作为本地中央仓库,以及涉及的...

    Maven nexus 私服 搭建

    - 使用`mvn deploy:deploy-file`命令上传第三方库或其他自定义构件到私服中。 - 例如,上传Oracle JDBC驱动: ```sh mvn deploy:deploy-file -DgroupId=...

    Eclispe、Maven、nexus、Jenkins安装手册、操作指南

    - **部署构件至Nexus**:项目构建完成后可以将构件部署到Nexus仓库中,便于其他项目引用。 #### Jenkins安装与操作 **Jenkins简介** Jenkins是一款开源的持续集成/持续交付(CI/CD)服务器,主要用于自动化软件...

    搭建maven私服的软件

    现在,当你执行`mvn deploy`命令时,Maven会将本地构建的项目部署到Nexus的私服仓库。其他团队成员只需配置相同的`settings.xml`,就可以从这个私库中获取到这些构件,实现团队间的共享。 总结一下,搭建Maven私服...

    nexus-2.14.20-02.zip

    3. 发布构件:通过mvn deploy命令,将自定义构建的JAR、WAR等文件上传到Nexus的宿主仓库。 五、维护与更新 1. 监控与日志:Nexus提供监控工具,可以查看系统状态和日志,便于排查问题。 2. 更新升级:Nexus提供了...

    Maven伺服搭建

    Maven的命令行工具"mvn"是与Maven交互的主要方式,例如`mvn clean`用于清理项目目标目录,`mvn compile`用于编译源代码,`mvn package`用于打包项目,`mvn install`将项目安装到本地仓库,`mvn deploy`则会将项目...

Global site tag (gtag.js) - Google Analytics