【发布时间】:2011-05-06 20:36:39
【问题描述】:
在我的一个 Maven 项目中,依赖解析将成功一次,然后在以后的构建尝试中失败:
[WARNING] The POM for commons-logging:commons-logging:jar:1.1.1 is missing, no dependency information available
[WARNING] The POM for commons-httpclient:commons-httpclient:jar:3.1 is missing, no dependency information available
[WARNING] The POM for javax.mail:mail:jar:1.4.4 is missing, no dependency information available
...等等,直到我删除了与失败的工件相对应的maven-metadata-local.xml 文件(例如~/.m2/repository/commons-logging/commons-logging/maven-metadata-local.xml)。删除这些文件后,下一次mvn 调用将正常进行;元数据文件由该调用恢复(大概是检查我的上游存储库/镜像以获取更新的工件的过程的一部分),并且我再次出现上述错误,直到我再次删除元数据文件。
这会影响多个项目,尽管它似乎仅限于一组特定的依赖项。我想我可以去核并吹走我的本地回购,但我想了解问题是什么。
想法?
更新:看起来是 maven-invoker-plugin(这些构建用于通用集成测试)正在生成这些 maven-metadata-local.xml 文件。我没有使用仅集成测试的本地 repo as described here,只是因为这样做会导致重新下载所有传递依赖项 (unless you want to maintain an integration-specific settings.xml file!!!)。我已经以这种方式将调用程序插件与其他各种项目一起使用,并取得了很好的效果——当然在这样的过程中从未遇到过楔入的本地存储库。
更新 2 好的,这是可重复的,即使在从全新的本地存储库开始之后也是如此。这是在 OS X、Java 1.6.0_24 和 Maven 3.0.3 上;请注意,Maven 2.2.1 确实不会出现此问题。
这是其中一个有问题的项目:1.3.0-compat branch of rummage。重现:
> mvn clean test
# no error -- can run this and other builds that don't involve maven-invoker-plugin all day w/o problems
> mvn clean integration-test
# FAIL: "Could not resolve dependencies", with warnings as noted above
> mvn clean test
# FAIL: "Could not resolve dependencies", with warnings as noted above
一旦本地存储库中断(通过maven-metadata-local.xml 文件的生成,AFAICT),任何构建都不会通过依赖关系解析阶段。
运行 mvn -X 会为每个后来显然找不到的工件显示这样的行:
[DEBUG] Verifying availability of /Users/chas/.m2/repository/javax/mail/mail/1.4.4/mail-1.4.4.jar from []
当然,/Users/chas/.m2/repository/javax/mail/mail/1.4.4/mail-1.4.4.jar 等。 确实存在,/Users/chas/.m2/repository/javax/mail/mail/1.4.4/mail-1.4.4.pom 也存在。完全不解。在这一点上,我假设这是 Maven 3(或一些底层库)中的一个错误,现在我看到 2.2.1 是干净的。
【问题讨论】:
标签: maven integration-testing maven-3