在Nexus中部署工件时出错

aci*_*tal 90 deployment nexus pom.xml maven

我在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>
Run Code Online (Sandbox Code Playgroud)
  • 用户有权创建/读取/写入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>
Run Code Online (Sandbox Code Playgroud)

然后我执行

mvn deploy
Run Code Online (Sandbox Code Playgroud)

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

Man*_*ser 139

我能想到几件事:

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

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

  • 我将我的工件版本更改为SNAPSHOT,然后部署,一切正常.然后我意识到我正在尝试部署到Nexus组(而不是Nexus存储库),因此我的问题的原因是:'url to my nexus repository is wrong' (41认同)
  • 重要信息:"如果该版本是发行版(不是-SNAPSHOT版本),则已使用该版本部署该工件" (5认同)
  • 拯救了我的一天...我从 pom.xml 中的版本中删除了 -SNAPSHOT 单词,这就是为什么它无法部署到 nexus...我添加了 SN​​APSHOT 单词回来,它工作了.. (4认同)
  • 根据我的经验,错误的凭据导致401而不是400.使用"-SNAPSHOT"将版本名称后缀为我修复了问题. (3认同)
  • 您只需更改存储库的部署策略即可启用重新部署 (3认同)

bha*_*yas 31

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

尝试更改您的人工制品的版本以结束-SNAPSHOT.

  • 我想在这里发表评论,因为我在搜索中点击此页面.我遇到了同样的400错误,bhagyas在这里说的是关键(虽然我当时没有意识到),如果部署到快照存储库,版本必须以-SNAPSHOT结尾.我的版本是1.13.0.SNAPSHOT,我花了一个小时才弄明白它需要1.13.0-SNAPSHOT. (13认同)
  • 错误!更改为'xxxx-snapshot'无法解决问题. (5认同)
  • 不,你错过了重点,仔细阅读评论,它提到"所以问题的原因是:'我的nexus存储库的网址错了'".并了解什么是'返回代码是:400'(在您复制某人的评论作为答案之前) (2认同)

ank*_*kpd 11

对我来说问题的原因是-source.jars上传了两次(使用maven-source-plugin),这是被接受的答案中的原因之一.重定向回答我提到的问题: Maven发布插件失败:源工件被部署两次


roj*_*roj 8

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

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


小智 7

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

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


bos*_*vos 6

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

  • 只是添加到此,如果您没有对服务器的交互式访问(我不 - 它是一个托管框),您可以使用HTTP DELETE删除有问题的工件.我为此目的使用PostMan (2认同)