如何解决哪些传递依赖的POM指的是一个已解散的Maven存储库?

时间:2011-06-14 21:25:24

标签: maven

使用Maven 3.0.3我正在为我正在处理的项目收到“无法解决依赖关系......”错误:

[ERROR] Failed to execute goal on project arquillian-jetty-embedded-6.1: 
Could not resolve dependencies for project 
org.jboss.arquillian.container:arquillian-jetty-embedded-6.1:jar:1.0.0-SNAPSHOT: 
Failed to collect dependencies for [
org.jboss.arquillian.container:arquillian-container-spi:jar:1.0.0.CR1-SNAPSHOT (compile), 
org.jboss.arquillian.container:arquillian-container-test-spi:jar:1.0.0.CR1-SNAPSHOT (compile), 
org.jboss.arquillian.protocol:arquillian-protocol-servlet:jar:1.0.0.CR1-SNAPSHOT (compile), 
org.jboss.arquillian.testenricher:arquillian-testenricher-cdi:jar:1.0.0.CR1-SNAPSHOT (compile), 
org.jboss.arquillian.testenricher:arquillian-testenricher-resource:jar:1.0.0.CR1-SNAPSHOT (compile), 
org.jboss.arquillian.testenricher:arquillian-testenricher-initialcontext:jar:1.0.0.CR1-SNAPSHOT (compile), 
org.jboss.shrinkwrap.container:shrinkwrap-container-jetty-60:jar:1.0.0-beta-1 (compile), 
org.mortbay.jetty:jetty:jar:6.1.12 (provided), 
org.mortbay.jetty:jetty-plus:jar:6.1.12 (provided), 
org.jboss.arquillian.junit:arquillian-junit-container:jar:1.0.0.CR1-SNAPSHOT (test), 
junit:junit:jar:4.8.1 (test), 
javax.enterprise:cdi-api:jar:1.0 (test), 
org.mortbay.jetty:jetty-naming:jar:6.1.12 (test), 
org.glassfish.web:el-impl:jar:2.2 (test), 
javax.servlet.jsp:jsp-api:jar:2.2 (test), 
com.h2database:h2:jar:1.2.138 (test), 
org.jboss.shrinkwrap.resolver:shrinkwrap-resolver-impl-maven:jar:1.0.0-beta-2 (test)]: 
Failed to read artifact descriptor for org.jboss.interceptor:jboss-interceptor-api:jar:1.1: 
Could not transfer artifact org.jboss.interceptor:jboss-interceptor-api:pom:1.1 
from/to repository.jboss.org (http://repository.jboss.org/maven2): 
Access denied to: 
http://repository.jboss.org/maven2/org/jboss/interceptor/jboss-interceptor-api/1.1/jboss-interceptor-api-1.1.pom -> 
[Help 1]

我知道错误正在发生,因为dead repository is being referenced,我可以通过在settings.xml中为该存储库配置活动镜像来解决它。我知道有问题的工件,jboss-interceptor-api,不是我正在处理的项目的直接依赖项,也不是直接引用死存储库的项目。目前尚不清楚的是我如何确定违规的传递依赖及其对相关项目的沿袭?我想纠正潜在的问题,或者至少告诉那些可能的人。

我搜索了我的本地存储库,发现了几个对dead repo的引用,但这些工件都不属于上面错误消息中列出的依赖项。我尝试在项目上运行mvn -U dependency:tree时遇到错误,所以也没有帮助。我在-X调试输出中也没有看到任何线索,但如果需要我可以发布所有线索。

1 个答案:

答案 0 :(得分:0)

Samuel所说的不是真的 - 任何pom.xml文件都可以包含一个<repositories>节来定义它将从中提取工件的repo。这不是最佳实践(甚至是可接受的实践!),但它确实发生了。我曾经发生过一些预先发布的EclipseLink工件。

但是,由于我们知道有问题的POM已下载到您的计算机上(否则Maven不会抱怨),然后首先搜索您当地的~/.m2以查找支持<repositories>节的任何poms。在Linux上,我会这样做:

grep -r \<repositories\> .

然后我开始浏览所有那些可疑文件。我有一个非常大的项目,但在我的机器上运行该命令导致只有30个冒犯的poms。

我确信awk专家可以给你一个更好的命令来运行,它会返回那些潜在的文件并再次搜索它们以获得无效的回购。

无论如何,希望这有帮助。