在Nexus中部署工件时出错

问题描述 投票:79回答:12

我在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.hml

<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

并得到错误。任何的想法?

maven deployment pom.xml nexus
12个回答
136
投票

我能想到几件事:

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

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


1
投票

如果上述任何答案都解决了,您可以直接从管理端创建新工件(下面附带NEXUS屏幕截图)。

  1. Login to nexus UI http://YOUR_URL:8081/nexus(用户名:admin默认密码:admin123)
  2. 左侧的Click repositories然后单击repo,例如:单击释放。
  3. 选择artifact Upload(最后一个标签)。
  4. 选择GAV definition作为GAV Param-然后输入你的groupid,工件ID和版本。
  5. 选择Jar文件。
  6. 单击上载工件。而已 !

现在,您将能够在项目中添加相应的内容。(截图如下)

enter image description here


0
投票

如果您有版本的命名策略,禁止您尝试部署的版本#,也会发生这种情况。在我的情况下,我试图上传一个版本(发布回购)2.0.1,但后来发现我们的nexus配置不允许发布以外的任何其他内容。

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

错误消息肯定没有帮助:

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

一个更好的信息可能是version 2.0.1 violates naming policy


0
投票

对于400错误,请检查存储库“部署策略”,通常是“禁用重新部署”。大部分时间你的库版本已经存在,这就是为什么你收到消息“无法PUT把'https://yoururl/some.jar'。从服务器接收状态代码400:存储库不允许更新资产:”你的存储库名称“

所以,你有几个选择来解决这个问题。 1-允许重新部署2-从您尝试上载的存储库中删除版本3-更改版本号


30
投票

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

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


10
投票

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


7
投票

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

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


6
投票

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


5
投票

如果您尝试以下情况,将退回400 Bad Request:

  1. 将以-SNAPSHOT结尾的快照工件(或版本)部署到发行版存储库
  2. 将发布工件(版本未以-SNAPSHOT结尾)部署到快照存储库
  3. 将同一版本的发布工件多次部署到发布存储库

3
投票
  • 在父pom应用程序中==> Version将标记放在如下:x.x.x-SNAPSHOT

示例:0.0.1-SNAPSHOT

  • “-SNAPSHOT”:非常重要

2
投票

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


2
投票

我今天遇到了同样的问题,“返回代码是:400,ReasonPhrase:Bad Request”。原来是“神器已经部署了该版本,如果它是一个发布”问题来自enter link description here以上的答案

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

© www.soinside.com 2019 - 2024. All rights reserved.