使用Jenkins运行Maven部署时出错“无法传输元数据”

时间:2016-01-29 15:00:18

标签: maven jenkins nexus

我有2个Maven项目,这些项目每天都在Jenkins构建的Nexus快照存储库中部署。 对于一个项目,一切正常。 对于第二个,每次Jenkisn运行mvn deploy时都会出现以下错误:

[INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ my-second-project ---
[INFO] Downloading: http://my.nexus/content/repositories/snapshots/fr/domain/my-second-project/0.18.0-SNAPSHOT/maven-metadata.xml
[WARNING] Could not transfer metadata fr.domain:my-second-project:0.18.0-SNAPSHOT/maven-metadata.xml from/to my.nexus (http://my.nexus/content/repositories/snapshots): Access denied to: http://my.nexus/content/repositories/snapshots/fr/domain/my-second-project/0.18.0-SNAPSHOT/maven-metadata.xml , ReasonPhrase:Forbidden.

这2个项目的版本完全相同。

我尝试在两个Jenkins版本上运行mvn help:effective-settings,而不是mvn deploy:它为两个项目返回完全相同的设置。但是一个部署在Nexus上,而另一个则没有......

修改 mvn help:effective-pom也没有显示任何有用的差异。除了项目名称和一些依赖项,它们是相同的。

在第二个项目的情况下,它从未部署在nexus上。所以元数据还不存在。但我试图拖尾nexus request.log文件,当Jenkins在第二个项目上运行mvn deploy时,它永远不会被击中。我没有那个电话的痕迹。

有没有人有想法?

修改: 我终于发现公司代理正在抛出“禁止”错误。这很奇怪,因为在settings.xml Maven配置文件中,我有以下内容:

<proxy>
    <id>****</id>
    <active>true</true>
    <protocol>http</protocol>
    <host>**********</host>
    <port>8080</port>
    <nonProxyHosts>my.nexus|127.0.0.1|...</nonProxyHosts>
</proxy>

失败的作业是忽略“nonProxyHosts”部分:调用配置中定义的代理并抛出错误。正常构建的作业不会调用代理(正常行为)。

我仍在寻找有关此行为原因的想法......

2 个答案:

答案 0 :(得分:1)

解决此问题的最简单方法是删除maven附加了.lastUpdated前缀的依赖项或工件。只有在那之后,您才能成功更新maven项目的依赖项。

对于Unix用户:

  1. 查找〜/ .m2-名称“ * .lastUpdated” -exec grep -q“无法传输” {} \; -print -exec rm {} \;

  2. 右键单击您的项目,然后选择“更新依赖项”

对于Windows用户:

  1. 将CD(更改目录)更改为<user-directory>\.m2\repository
  2. 执行此命令for /r %i in (*.lastUpdated) do del %i
  3. 右键单击您的项目,然后选择Update Dependencies

答案 1 :(得分:0)

这是凭据问题。

找出maven正在使用哪个settings.xml。 mvn -v

然后在该文件中使用正确的凭据更新该部分

 <server>
      <id>deploymentRepo</id>
      <username>deployment</username>
      <password>deployment</password>
    </server>

现在尝试:)