如何解决哪个传递依赖项的POM引用了已失效的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]
我知道发生此错误是因为正在引用失效的存储库,并且可以通过在settings.xml中为该存储库配置活动镜像来解决错误。我知道有问题的工件jboss-interceptor-api并不是我正在从事的项目的直接依赖项,也不是该项目直接引用失效的存储库。尚不清楚的是,如何确定有问题的传递性依赖关系及其对所涉及项目的血统?我想更正根本问题,或者至少通知可能的问题。 我已经搜索了本地存储库,并找到了对死仓库的几个引用,但是这些工件都没有属于上面错误消息中列出的依赖项。我在尝试在项目上运行
mvn -U dependency:tree
时遇到错误,因此那里也没有帮助。我也没有在
-X
调试输出中看到任何线索,尽管我可以根据需要将其全部发布。     

解决方法

        塞缪尔(Samuel)说的是不正确的-任何pom.xml文件都可以包含一个
<repositories>
节来定义一个将从中提取工件的回购。这不是最佳实践(甚至不是可以接受的实践!),但是确实发生了。不久前我发生了一些预发布的EclipseLink工件。 但是,由于我们知道有问题的POM已下载到您的计算机上(否则Maven不会抱怨),然后首先在本地
~/.m2
中搜索是否有
<repositories>
节的pom。在Linux上,我会这样做:
grep -r \\<repositories\\> .
然后我将开始浏览所有这些可疑文件。我有一个很大的项目,但是在我的机器上运行该命令只会导致30个冒犯的pom。 我确定7位专家可以为您提供更好的命令来运行,该命令将返回这些潜在文件并再次搜索无效的存储库。 无论如何,希望这会有所帮助。