我使用maven将工件部署到sonatype nexus,我可以正常执行发布操作,但部署快照失败 .
-
sonatype nexus 2.7.0.5
-
Java 1.7
-
maven 3.0.5
-
mvn release:prepare; mvn release:perform;成功没有任何错误
-
mvn部署失败,返回码为500
[INFO] maven-jar-plugin:2.4:jar (default-jar) @ licm
[INFO] Building jar: /foo/licm/trunk/target/licm-0.2.9-SNAPSHOT.jar
[INFO]
[INFO] maven-install-plugin:2.3.1:install (default-install) @ licm
[INFO] Installing /foo/licm/trunk/target/licm-0.2.9-SNAPSHOT.jar to /foo/.m2/repository/com/xxx/utils/licm/0.2.9-SNAPSHOT/licm-0.2.9-SNAPSHOT.jar
[INFO] Installing /foo/licm/trunk/pom.xml to /foo/.m2/repository/com/xxx/utils/licm/0.2.9-SNAPSHOT/licm-0.2.9-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.8.1:deploy (default-deploy) @ licm ---
Downloading: http://xxx.xxx.com:8080/nexus/content/repositories/snapshots/com/xxx/utils/licm/0.2.9-SNAPSHOT/maven-metadata.xml
[WARNING] Could not transfer metadata com.xxx.utils:licm:0.2.9-SNAPSHOT/maven-metadata.xml
from/to Snapshots (http://xxx.xxx.com:8080/nexus/content/repositories/snapshots): Failed to transfer file:
http://xxx.xxx.com:8080/nexus/content/repositories/snapshots/com/xxx/utils/licm/0.2.9-SNAPSHOT/
maven-metadata.xml. Return code is: 500 , ReasonPhrase:Internal Server Error.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.824s
[INFO] Finished at: Fri Dec 20 01:20:33 CST 2013
[INFO] Final Memory: 8M/20M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.1:deploy (default-deploy) on project licm: Failed to retrieve remote metadata com.xxx.utils:licm:0.2.9-SNAPSHOT/maven-metadata.xml: Could not transfer metadata com.xxx.utils:licm:0.2.9-SNAPSHOT/maven-metadata.xml from/to Snapshots (http://xxx.xxx.com:8080/nexus/content/repositories/snapshots): Failed to transfer file: http://xxx.xxx.com:8080/nexus/content/repositories/snapshots/com/xxx/utils/licm/0.2.9-SNAPSHOT/maven-metadata.xml. Return code is: 500 , ReasonPhrase:Internal Server Error. -> [Help 1]"
这是我第一次将快照部署到远程存储库,因此nexus服务器上的快照存储库中没有任何内容
- settings.xml
<?xml version="1.0"?>
<settings>
<servers>
<server>
<id>Releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>Snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
</servers>
<mirrors>
<mirror>
<id>Nexus</id>
<name>Nexus Public Mirror</name>
<url>http://xxx.xxx.com:8080/nexus/content/groups/public</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>
- pom.xml
<distributionManagement>
<repository>
<id>Releases</id>
<name>xxx Releases Repositories</name>
<url>http://xxx.xxx.com:8080/nexus/content/repositories/releases</url>
</repository>
<snapshotRepository>
<id>Snapshots</id>
<name>xxx Snapshots Repositories</name>
<url>http://xxx.xxx.com:8080/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
5 回答
Nexus需要符合Servlet 3.0标准的容器 . 它捆绑了一个符合Servlet 3.0标准的Jetty 8.如果你将它部署在另一个容器上,你必须确保它是兼容的 . 无法在文件中找到这一点,但从自己的经验来看似乎是这样 .
当你
HTTP GET http://xxx.xxx.com:8080/nexus/content/repositories/snapshots/com/xxx/utils/licm/0.2.9-SNAPSHOT/maven-metadata.xml
在浏览器中,您应该能够看到包含的堆栈跟踪
java.lang.NoSuchMethodError: javax.servlet.http.HttpServletResponse.getStatus()
这仅适用于Servlet 3.0容器 .
自己回答 .
当nexus服务器找不到maven-metadata.xml时,会导致tomcat抛出异常,这就是问题所在
我将Tomcat版本从6.x更改为7.0.x,一切正常
我遇到了相同的返回码(500)和原因(内部服务器错误),并且finnaly发现nexus服务器磁盘空间已满 . :)检查服务器中的nexus日志可以找到这个线索 .
这是我报告的类似错误:
在我执行@hansi建议的http文件验证后,服务器响应为
javax.servlet.ServletException: java.lang.NumberFormatException: null
.在对这是什么原因做了一些回顾之后,我发现这是因为工件创建时间戳的问题 . 在我的情况下,
maven-metadata.xml
已损坏,这是由于服务器中的重新启动导致在夏令时完成后自动调整时间 . 我在这篇文章中得到了一个线索https://issues.sonatype.org/browse/NEXUS-12496在我的案例中有用的是删除所有工件引用中的
maven-metadata.xml
. 之后,错误得到纠正 .在这里,我们失败了 .
正在下载:http://xxx.xxx.com:8080/nexus/content/repositories/snapshots/com/xxx/utils/licm/0.2.9-SNAPSHOT/maven-metadata.xml
然后我们无法获得该发布快照,因此我们手动将pom.xml文件更新为相关的依赖项详细信息然后它将起作用 .