在Nexus中部署工件时出错

时间:2013-09-06 03:38:59

标签: maven deployment pom.xml nexus

我在Nexus服务器的自己的存储库中部署工件时遇到错误:“无法部署工件:无法传输工件”“无法传输文件http:/// my_artifact。返回代码为:400”

我让Nexus运行一个自定义存储库my_repo,并使用下一个maven本地配置:

的settings.xml

<server>
    <id>my_repo</id>
    <username>user</username>
    <password>pass</password>
 </server>
 ...
 <mirror>
    <id>my_repo</id>
    <name>Repo Mirror</name>
    <url><my_url_to_my_repo></url>
    <mirrorOf>*</mirrorOf>
  </mirror>
  • 用户有权创建/读取/写入my_repo -

的pom.xml

<distributionManagement>
        <repository>
            <id>my_repo</id>
            <name>my_repo</name>
            <url><my_url_to_my_repo></url>
            <layout>default</layout>
        </repository>
        <snapshotRepository>
            <id>snapshots</id>
            <name>Snapshots</name>
            <url><my_url_to_my_snapshot_repo></url>
        </snapshotRepository>
    </distributionManagement>

然后我执行

mvn deploy

并得到错误。有什么想法吗?

14 个答案:

答案 0 :(得分:127)

我能想到的几件事:

  • 用户凭据错误
  • 服务器的网址错误
  • 用户无权访问部署存储库
  • 用户无权访问特定的存储库目标
  • 工件已经部署了该版本,如果它是一个版本(不是-SNAPSHOT版本)
  • 存储库不适合部署相应的工件(例如,快照版本,代理存储库或组的发布存储库而不是托管存储库)

检查这些,如果仍然遇到问题,请在此处提供更多详细信息。

答案 1 :(得分:29)

只是为了创建一个单独的答案。答案实际上是在对已接受答案的评论中找到的。

尝试将您的人工制品版本更改为-SNAPSHOT

答案 2 :(得分:8)

问题的原因是-source.jars上传了两次(使用maven-source-plugin),这是被接受的答案中的原因之一。重定向回答我提到的: Maven release plugin fails : source artifacts getting deployed twice

答案 3 :(得分:7)

我今天遇到了这个问题,问题是我试图发布的版本:执行已经在Nexus回购中了。

在我的情况下,这可能是由于在早期调用release:perform期间网络断开连接。即使我丢失了连接,看起来发布也成功了。

答案 4 :(得分:6)

在极少数情况下,您需要将相同的STABLE工件重新部署到Nexus,默认情况下它将失败。然后,如果您再次从Nexus中删除工件(通过Web界面)以再次部署它,则部署仍然会失败,因为只需删除例如jar或pom不会清除目录中仍然存在的其他文件。您需要登录该框并完整删除该目录。

答案 5 :(得分:3)

    父pom应用程序中的
  • ==&gt;版本标记如下:x.x.x-SNAPSHOT

示例:0.0.1-SNAPSHOT

  • &#34; -SNAPSHOT&#34; :非常重要

答案 6 :(得分:3)

如果您尝试执行以下操作,则会返回400错误请求:

  1. 将以 -SNAPSHOT 结尾的快照工件(或版本)部署到版本存储库
  2. 版本工件(版本 -SNAPSHOT 结尾的版本)部署到快照存储库

答案 7 :(得分:2)

确保在nexus中已经不存在(工件和版本)(作为发布)。在那种情况下,返回Bad Request。

答案 8 :(得分:2)

今天我遇到了同样的问题,“返回代码是:400,ReasonPhrase:Bad Request”。从上面的回答enter link description here

开始,结果证明“工件已经部署了该版本,如果它是一个版本”

尚未提及的一个解决方案是配置Nexus以允许重新部署到Release存储库。也许不是最佳做法,因为这是有原因的,但您可以在Nexus存储库的“配置”-Tab中进入“访问设置”并将“部署策略”设置为“允许重新部署”。

答案 9 :(得分:1)

如果上述任何一个问题得以解决,您可以直接从(下方附带NEXUS屏幕截图)的管理端创建新工件。

  1. Login to nexus用户界面http://YOUR_URL:8081/nexus(用户名:管理员 默认密码: admin123
  2. 左侧的
  3. Click repositories然后点击回购,例如:点击发布。
  4. 选择artifact Upload(最后一个标签)。
  5. 选择GAV definitionGAV Param - 然后输入您的groupid,工件ID和版本。
  6. 选择Jar文件。
  7. 点击上传工件。 多数民众赞成!
  8. 现在,您可以在项目中添加相应的内容。(截图如下)

    enter image description here

答案 10 :(得分:0)

如果您有关于版本的命名策略,并且禁止尝试部署的版本号,则也会发生这种情况。以我为例,我试图上传一个版本(以发布回购版本)2.0.1,但后来发现我们的关系配置不允许发布除整数以外的任何内容。

我稍后尝试使用版本2,并成功部署了它。

错误消息绝对无济于事:

Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases-xxx. -> [Help 1]

一个更好的消息应该是version 2.0.1 violates naming policy

答案 11 :(得分:0)

对于400错误,请检查存储库“部署策略”,通常是其“禁用重新部署”。大多数情况下,您的库版本已经存在,这就是为什么您收到消息“无法PUT放置'https://yoururl/some.jar'的原因。从服务器收到状态码400:存储库不允许更新资产:“您的存储库名称” < / p>

因此,您可以选择一些方法来解决此问题。 1-允许重新部署 2-从您要上载的存储库中删除版本 3-更改版本号

答案 12 :(得分:0)

服务器ID应与Maven settings.xml的存储库ID匹配

答案 13 :(得分:0)

答案为时已晚,但这对我有用: Changing "Deployment Policy" to "Allow redeploy"