Error when deploying an artifact in Nexus

Im' getting an error when deploying an artifact in my own repository in a Nexus server: "Failed to deploy artifacts: Could not transfer artifact" "Failed to transfer file http:///my_artifact. Return code is: 400"

I have Nexus running with one custom repository my_repo with the next maven local configuration:

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>
  • user has permissions to create/read/write into 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>

and then I execute

mvn deploy

and get the error. Any idea?

214459 次浏览

我能想到几件事:

  • 用户凭证错误
  • Url 到服务器是错误的
  • 用户不能访问部署存储库
  • user does not have access to the specific repository target
  • artifact is already deployed with that version if it is a release (not -SNAPSHOT version)
  • 存储库不适合部署相应的工件(例如,针对快照版本的发布回购、代理回购或组,而不是托管存储库)

检查这些,如果你仍然遇到麻烦,在这里提供更多的细节。

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

尝试将工件的版本更改为以 -SNAPSHOT结束。

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

在我的案例中,这可能是由于在早期调用 release: Performance 时网络断开所致。尽管我失去了联系,但看起来释放成功了。

确保不存在(工件和版本)的连接(作为发布)。在这种情况下返回不良请求。

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

今天我在添加“返回代码是: 400,原因短语: 错误请求”时遇到了同样的问题从 在这里输入链接描述以上的答案可以看出,这个问题是“如果工件是一个发布版本,那么它已经与该版本一起部署了”

一个尚未提及的解决方案是配置 Nexus 以允许重新部署到发行版存储库中。也许这不是一个最佳实践,因为这是有原因的,但你仍然可以在你的 Nexus 存储库“ Configuration”-Tab 中的“ Access Settings”中将“ Deployment Policy”设置为“ Allow Reloyment”。

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

  • 在父 pom application = = > Version 中,将标记放置如下: x.x.x-SNAPSHOT

示例: 0.0.1-SNAPSHOT

  • “-SNAPSHOT”: 非常重要

如果以上任何答案工作了,您可以创建新的工件直接从管理方面(NEXUS 屏幕截图附在下面)。

  1. 用户名: < strong > admin 默认密码: Admin123)
  2. Click repositories的左侧,然后点击回购,例如: 点击释放。
  3. 选择 artifact Upload(最后一个选项卡)。
  4. 选择 GAV definition作为 GAV Param-然后输入您的 groupid、工件 id 和版本。
  5. 选择 Jar 文件。
  6. 点击上传艺术品。 够了!

现在您可以在项目中添加相应的代码了

enter image description here

400错误请求将被返回,如果您尝试:

  1. 将以 快照结尾的 快照构件(或版本)部署到 释放存储库
  2. 释放构件(以 快照结尾的版本 没有)部署到 快照存储库
  3. 释放构件的 same版本多次部署到 释放存储库

如果您有一个围绕版本的命名策略,禁止您试图部署的版本 # ,也会发生这种情况。在我的情况下,我试图上传一个版本(发布回购) 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

对于400错误,请检查存储库“ Deployment policy”,通常是它的“ Disable reloyment”。大多数时候你的库版本已经存在了,这就是为什么你收到一条消息“不能放入‘ https://yoururl/some.jar’”。从服务器接收到状态代码400: 存储库不允许更新资产: “您的存储库名称”

So, you have a few options to resolve this. 1- allow redeploy 2-从存储库中删除要上传的版本 3-更改版本号

服务器 id 应该与 maven setings.xml 的存储库 id 匹配

What worked for me was disabling the ReleaseProfile that comes with the release plugin and skipping the deployment in the deploy plugin
        

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat
<autoVersionSubmodules>true</autoVersionSubmodules>
<releaseProfiles>releases</releaseProfiles>
<useReleaseProfile>false</useReleaseProfile>
</configuration>
</plugin>
           

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
    

Use mvn help:effective-pom

我得到了相同的400响应状态,并且通过添加 -Dresume=false解决了这个问题。

mvn -B release:prepare release:perform -Dresume=false

在我的示例中,将跳过 release: ready 目标,并在输出中记录以下消息。

[INFO] Release preparation already completed. You can now continue with release:perform, or start again using the -Dresume=false flag

我怀疑我可能在 pom.xml 中做了一些更改,这些更改需要强制执行发布: 准备在运行发布: 执行之前再次运行。

注意你的线人在你的 release:prepare步之后做部署。对我们来说,这是最近在 詹金斯的官方 Bitbucket 服务器集成插件的介绍,立即从 release:prepare的推力点火。

修正的方法是在插件中添加一个步骤,使用: ^(?s)\[maven-release-plugin\].*(来自 https://stackoverflow.com/a/32371336/1399659)“ Polling 忽略某些消息的提交”