【问题标题】:Maven 3 dependency resolution fails until maven-metadata-local.xml files are deleted [maven-invoker-plugin related]Maven 3 依赖解析失败,直到删除 maven-metadata-local.xml 文件 [maven-invoker-plugin 相关]
【发布时间】: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 是干净的。

更新 3 Bug report filed with Maven project.

【问题讨论】:

    标签: maven integration-testing maven-3


    【解决方案1】:

    这个问题在 aether 1.12 中得到解决,比 Maven 3.0.3 附带的 aether 1.11 库高一个版本。在一个人的 Maven 安装中将 aether 1.11 替换为 1.12 会导致预期的行为 (as noted in the bug I filed)。希望 Maven 3.0.4 尽快与以太 1.12 一起发布。 :-)

    【讨论】:

      【解决方案2】:

      您没有提及您可能尝试过的内容,所以也许您没有尝试过这个:添加 -U 选项以强制更新? (也许这个 -U 选项只与 SNAPSHOT 相关......)

      【讨论】:

      • 是的,-U 仅检查 SNAPSHOT AFAIK;也就是说,是的,我试过了,但没有用。
      【解决方案3】:

      我已经看到由本地存储库中的文件损坏导致的类似错误。例如,如果下载中途失败,或者远程存储库中的文件在我下载后发生更改。删除~/.m2下的受影响目录修复了它。

      【讨论】:

      • 吹走我的存储库并不能解决问题;它可以从一个完全干净的本地 repo 中重复。在主要问题的描述中添加了注释,以及指向受影响的公共项目分支的链接。
      猜你喜欢
      • 1970-01-01
      • 2020-01-25
      • 2020-04-26
      • 1970-01-01
      • 2019-12-27
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多