具体怎样使用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”错误,错误信息如下格式:
Error deploying artifact: Failed to transfer file:… Return code is:4xx
也就是说前面错误的信息都是一样的,只是后面返回的HTTP状态数字不同。
1. Return code is: 405
这个问题害我查了两个多小时才发现错误的根源,简单的错误就是在Maven执行到上传文件到服务器的时候出现一个HTTP 405错误。开始的时候总以为是Maven本身的问题,所以在这个上面浪费了不少时间。后来仔细查了405错误的含义是“用来访问本页面的 HTTP 方法不被允许”,最后终于发现是因为前面repository的地址写错了,或者是端口写错,或者是地址中的某个单词拼错了,反正原因就是 repository的地址写错了。
2. 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>nexus-releases</id>
<username>deployment</username>
<password>deploydv89</password>
</server>
<server>
<id>nexus-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盘里面,具体的操作可以看下面的参考资料。
3. 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构建Web工程项目时最常用的几个方面,包括项目的初始化、构建、测试、打包、安装等。熟练掌握这些命令,可以帮助开发者更加高效地管理和维护项目。同时,根据不同的需求,还可以组合使用这些命令...
本篇文章将深入探讨Maven的使用以及其部署原理。 首先,Maven通过使用一个标准化的项目对象模型(Project Object Model,POM)来描述项目,并基于此执行构建任务。POM是一个XML文件,包含了项目的配置信息,如项目...
部署项目使用`mvn deploy`命令。 ### 使用FTP部署 如果仓库服务器支持FTP,你可以使用Maven的` wagon-ftp `插件进行部署。首先,确保你的`pom.xml`包含了该插件: ```xml <groupId>org.apache.maven.wagon ...
Maven 是一个项目管理和构建自动化工具,提供了许多实用的命令来简化项目的开发和维护过程。在这篇文章中,我们将总结和讲解 Maven 中的一些常用命令,它们将帮助您更好地使用 Maven。 创建 Maven 项目 Maven 提供...
### Maven部署到Nexus知识点详解 #### Maven与Nexus简介 - **Maven**:Apache Maven是一款基于项目对象模型(POM)的软件项目管理和理解工具。通过一系列标准生命周期构建项目,简化了项目的构建、依赖管理和文档...
1. **项目对象模型(POM)**:Maven 使用一个 XML 文件(通常是 `pom.xml`)来描述项目的基本信息、构建过程、依赖关系等。 2. **依赖管理**:Maven 能够自动处理项目所需的所有外部依赖,开发者不需要手动下载和...
【标题】"hudson svn maven deploy BOM" 涉及到的IT知识点主要集中在持续集成工具Hudson、版本控制系统Subversion(SVN)、构建工具Maven以及部署插件和字符编码处理方面。以下是对这些关键概念的详细解释: 1. **...
### Jenkins 实现 Maven 项目自动部署到 Tomcat 在当今快速发展的软件开发环境中,持续集成(CI)与持续部署(CD)已经成为不可或缺的部分。本文将详细介绍如何利用 Jenkins 实现 Maven 项目的自动部署到 Tomcat ...
Maven 的强大之处在于其提供了一种标准化的方式来构建、测试和部署项目,使得开发者可以更方便地管理项目。 Maven 的常用命令可以分为以下几类: 1. 项目创建命令 命令:mvn archetype:create 作用:创建一个新...
maven教程,目录如下: ...使用“mvn site-deploy”部署站点(WebDAV例子) 部署基于Maven的war文件到Tomcat Eclipse创建一个Maven Web项目 在易百教程网看到的,觉得还不错,就做成了chm笔记本形式
3. **构建生命周期**:Maven定义了一系列的构建阶段(如编译、测试、打包、部署等),每个阶段都有对应的目标(goals)可以执行。 4. **插件和目标**:Maven拥有丰富的插件系统,可以通过插件扩展构建过程。每个...
通过运行特定的Maven命令,如`mvn tomcat7:deploy`,Maven会将项目打包成WAR文件,并自动上传到配置的Tomcat服务器上进行部署。这种方式极大地提高了开发效率,尤其是在持续集成和持续交付(CI/CD)流程中。 除了...
5. **生命周期与构建阶段**:Maven 提供了 clean、default 和 site 三大生命周期,每个生命周期包含多个构建阶段,如 compile、test、install 和 deploy。 ** Maven 插件 ** Maven 插件是 Maven 功能的重要扩展,...
根据提供的文件名,我们可以推测这可能是一个关于如何使用Maven构建项目,然后使用Tomcat部署Web应用的教程。`maven.sh`可能是执行Maven构建任务的脚本,例如执行`mvn clean install`命令来清理、编译、测试并打包...
4. **部署到Tomcat**:构建成功后,Jenkins可以通过使用`deploy`生命周期阶段的Maven目标,如`mvn tomcat7:deploy`,将WAR文件部署到远程Tomcat服务器。也可以编写shell脚本手动完成这个过程,包括停止Tomcat、复制...
### 使用Jenkins自动构建部署Java Maven项目 #### 一、软件环境配置 为了实现Java Maven项目的自动化构建与部署,首先需要准备如下软件环境: - **操作系统**:Windows Server 2012 R2 (64位) - **JDK版本**:1.7...
**Maven笔记(2)-- 构建Java Project 及 Maven命令使用** Maven是Apache组织开发的一个项目管理和综合工具,主要用于Java项目构建、依赖管理和项目信息管理。它通过一个统一的构建过程,使得项目的构建变得简单且...
- **生命周期管理**: Maven 提供了诸如 `mvn clean` 清理项目,`mvn compile` 编译源代码,`mvn test` 运行测试,`mvn package` 打包项目,`mvn deploy` 部署等命令。 - **依赖管理**: 在 `pom.xml` 中声明依赖,...
在Java开发领域,Maven是一个不可或缺的工具,它极大地简化了构建、管理和部署Java项目的过程。本篇文章将深入探讨如何使用Maven命令来创建工程、打包工程以及掌握一些常用的Maven命令。 首先,让我们了解Maven的...