mvn deploy:deploy-file - 无法部署工件:找不到工件

时间:2013-04-25 15:38:06

标签: maven nexus

我正在尝试将第三方供应商的jar添加到我们的内部nexus存储库。

我尝试使用此命令执行此操作:

mvn deploy:deploy-file 
-DgroupId=acme 
-DartifactId=acme 
-Dversion=1.0 
-Dpackaging=jar 
-Dfile=C:\tmp\acme-1.0.jar 
-DrepositoryId=Nexus 
-Durl=http://myserver:8888/nexus/content/repositories/thirdparty/

在我的settings.xml中输入以下内容:

  <servers>
        <server>
            <id>Nexus</id>
            <username>myusername</username>
            <password>mypassword</password>
        </server>
  </servers>

但是我收到了这个错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:
deploy-file (default-cli) on project standalone-pom: Failed to deploy artifacts:
 Could not find artifact acme:acme:jar:1.0 in Nexus (http://myserver:8888/nexus/c
ontent/repositories/thirdparty) -> [Help 1]

有什么建议吗?

一些相关信息...... 我可以使用以下命令安装到我的本地存储库:

mvn install:install-file 
-DgroupId=acme 
-DartifactId=acme 
-Dversion=1.0 
-Dpackaging=jar 
-Dfile=C:\tmp\acme-1.0.jar

我还使用GAV参数通过Nexus网络界面尝试了“神器上传”:

Group: acme
Artifact: acme
Version: 1.0
Packaging: jar

选择&amp;添加acme-1.0.jar。 这样就完成了,但项目中的“mvn install”取决于这个jar会导致:

Could not find artifact acme:acme:jar:1.0 in Nexus (http://myserver:8888/nexus/content/groups/public)

我的pom包含:

<repositories>
  <repository>
    <id>Nexus</id>
    <url>http://myserver:8888/nexus/content/groups/public</url>
    <releases><enabled>true</enabled></releases>
    <snapshots><enabled>true</enabled></snapshots>
  </repository>
</repositories>

任何帮助都非常感谢...

PS我知道这个问题与this one非常相似,但问题似乎是使用jenkins网址,而不是nexus网址。

2 个答案:

答案 0 :(得分:6)

回答我自己的问题。我解决了这个问题如下:

1)如果您位于代理服务器后面(即您在maven settings.xml中设置了代理服务器),但您的nexus服务器是内部的,则可能需要在settings.xml中将nexus服务器添加为nonProxyHost,例如

<proxies>
  <proxy>
    ...
    <nonProxyHosts>myserver</nonProxyHosts>
  </proxy>
</proxies>

我意识到我需要这样做,因为我运行的"mvn deploy:deploy-file"命令似乎根本没有达到nexus repo。 例如,我可以更改settings.xml的服务器部分中的repo id,用户名或密码,但仍然会得到完全相同的错误。我也可以将deploy命令中的url更改为乱码(例如-Durl=notexist),甚至完全关闭我的nexus repo,STILL也会出现同样的错误。

2)确保您的第三方存储库设置为Release,而不是Snapshot。 要执行此操作,请转到Web GUI,选择第三方存储库的“配置”选项卡,并确保将“存储库策略”设置为“发布”。

我通过查看catalina.out日志(我在Tomcat中运行nexus作为战争)并看到以下内容找到了这一点:

ERROR org.sonatype.nexus.rest.ContentPlexusResource - Got exception during processing request "PUT http://myserver:888/nexus/content/repositories/thirdparty/acme/acme/1.0/acme-1.0.pom": Storing of item thirdparty:/acme/acme/1.0/acme-1.0.pom is forbidden by Maven Repository policy. Because thirdparty is a SNAPSHOT repository

通过这两个修复程序,“mvn deploy:deploy-file”命令以及通过Web GUI中的“Upload Artifacts”选项进行上传工作。

答案 1 :(得分:0)

登录nexus Web控制台并检查公共存储库配置,查看第三方是否在订购组存储库列表中。