Maven 在Nexus中部署工件时出错

Maven 在Nexus中部署工件时出错,maven,deployment,pom.xml,nexus,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>p

在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>

并获取错误。有什么想法吗?

我能想到几件事:

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

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

只需创建一个单独的答案。答案实际上可以在接受答案的注释中找到


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

结尾。我今天遇到了这个问题,问题是我试图发布的版本:perform已经在Nexus repo中


在我的例子中,这可能是由于在早期调用release:perform时网络断开。尽管我失去了连接,但发布似乎成功了。

确保nexus(作为发布版)中不存在(工件和版本)。在这种情况下,返回错误的请求。

在罕见的情况下,您需要将相同的稳定工件重新部署到Nexus,默认情况下它将失败。如果为了再次部署而从Nexus中删除工件(通过web界面),那么部署仍然会失败,因为仅仅删除例如jar或pom不会清除目录中仍然存在的其他文件。您需要登录到该框并删除整个目录。

我今天在添加“返回代码为:400,原因短语:错误请求”时遇到了同样的问题。这就是上面的答案中的“如果是发布版本,则该版本已部署工件”问题


一个尚未提及的解决方案是配置Nexus以允许重新部署到发布存储库中。可能不是最佳做法,因为这是有原因设置的,但是您可以转到Nexus存储库´“配置”选项卡中的“访问设置”,并将“部署策略”设置为“允许重新部署”。

我的问题原因是-source.jars上载了两次(使用maven source插件)正如公认答案中提到的原因之一。重定向到我提到的答案:

  • 在父pom应用程序==>Version中,按如下方式放置标记:x.x.x-SNAPSHOT
示例:0.0.1-SNAPSHOT

  • “快照”:非常重要

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

  • 登录到nexus
    UI(用户名:admin 默认密码:admin123
  • 单击左侧的存储库
    ,然后单击回购,例如:单击发行
  • 选择
    工件上传
    (最后一个选项卡)
    
  • 选择
    GAV定义
    作为
    GAV参数
    ——然后输入您的组id、工件id和版本
  • 选择Jar文件
  • 单击上载工件。 就这样 现在,您将能够在项目中添加相应的内容。(下面的屏幕截图)


    400如果您试图:

  • 将以-snapshot结尾的快照工件(或版本)部署到版本存储库
  • 发行版工件(版本不是以-SNAPSHOT结尾)部署到快照存储库
  • 发布版本的相同版本的工件多次部署到发布版本的存储库中

  • 如果您对版本有命名策略,禁止您尝试部署的版本,也可能发生这种情况。在我的例子中,我试图上传一个版本(发布repo)
    2.0.1
    ,但后来发现我们的nexus配置只允许发布整数

    后来我尝试了版本
    2
    ,并成功部署了它

    错误消息肯定没有帮助:

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

    更好的消息可能是
    版本2.0.1违反命名策略

    有关400错误,请检查存储库“部署策略”,通常是其“禁用重新部署”。大多数情况下,您的库版本已经存在,这就是为什么您收到一条消息“无法放入”。从服务器收到状态代码400:存储库不允许更新资产:“您的存储库名称”

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

    服务器id应与maven设置的存储库id匹配。xml

    HTTP 400表示“错误请求”“。我猜其中一个URL不正确。对我来说,问题是它不是快照版本。我将工件的版本更改为快照,然后部署,一切正常。然后我意识到我正试图部署到一个Nexus组(不是Nexus存储库),所以我的问题的原因是:“我的Nexus存储库的url是错误的”重要提示:“工件已经部署了该版本,如果它是一个发行版(不是快照版本)”保存了我的一天。。。我从pom.xml的版本中删除了-SNAPSHOT这个词,这就是为什么它不能部署到nexus上。。。我添加了快照单词,它成功了。根据我的经验,错误的凭证会导致401,而不是400。用“-SNA”作为版本名称的后缀
    <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>
    
    Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases-xxx. -> [Help 1]