原文地址:http://www.javatang.com/archives/2010/01/23/4518375.html
具体怎样使用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-deploy-plugin-2.8.2.jar
Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project
maven-deploy-plugin-2.7.jar
Maven deploy到 nexus(csdn)————程序
主要介绍了Maven deploy配置方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
hudson 安装包 subversion 安装包 maven 包 hudson depoly 插件 UTF-8 BOM去除工具
maven-deploy-plugin-2.4.jar
maven-deploy-plugin-2.0.jar
maven-deploy-plugin-2.5.jar
主要介绍了maven deploy时报错的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
maven : deploy程序包用来快速上传第三方jar包提交成功后会自动生成deploy_config.txt保存url和仓库标识
清楚地描述问题,包括在出现错误时重现的步骤。 确保填写已知问题的最早版本。 在GitHub上分叉存储库。进行和提交更改我们通过GitHub接受拉取请求。 是贡献者交流的主要渠道。 有一些准则可以使我们更容易地应用PR...
eclipse远程调试hadoop时 报出eclipse Hadoop Failed to set permissions of path错误 修改hadoop core包中FileUtil java文件 里面有checkReturnValue方法 将代码throw new IOException "Failed to set ...
idea创建Maven项目时,报错显示Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.0.2:resources,并且Maven插件内看不到 mybatis-generator。如下图: 折腾了好久发现配置放错地方了,...
在<plugins></plugins>中添加 <groupId>org.apache.maven.plugins <artifactId>maven-compiler-plugin <version>3.8.1 <source>1.8 <target>1.8 </plugin>
maven-artifact-transfer-0.10.0.jar
工程运行环境有研发,测试和生产,不同的运行环境配置不同,maven 打包时指定文件目录,使用指定的文件夹下的配置文件。
maven deploy the local file to a remote server. 1.config your pom.xml; 2.config your setting.xml; 3.execte cmd --- mvn deploy
maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装maven安装...
pit1 spring boot之 maven install 报错[Maven][ERROR] Failed to execute goal org.spri