【问题标题】:How to prevent maven to resolve dependencies in local repository如何防止maven解决本地存储库中的依赖关系
【发布时间】:2010-05-05 11:04:10
【问题描述】:

有没有办法告诉 maven(在执行 mvn 包mvn 站点 或...时)不要从本地存储库中解析依赖项?

这个问题的背景: 有时我会遇到问题,因为以前缓存的依赖项(例如 SomeProject-0.7-ALPHA)在远程存储库中不再可用。在我的本地构建中,一切仍然正常,因为之前已经缓存了依赖项。一旦我与其他人共享我的 pom,他们可能会遇到麻烦,因为他们没有该依赖项的缓存版本,并且无法再从远程存储库中解析该依赖项。

任何帮助将不胜感激。提前致谢!

【问题讨论】:

  • 为什么远程仓库中的依赖不再可用?如果有更新的版本,为什么不直接升级到它呢?如果新版本不向后兼容,为什么要删除旧版本?
  • 问题在于检测到旧版本不再可用的事实。我无法手动检查所有依赖项,因为我有不再可用的依赖项的本地缓存版本,所以 maven 不会告诉我有问题。
  • 我了解您的直接问题;但是,我试图用我的问题指出,恕我直言,这背后可能存在流程问题。在这种情况下,最好解决根本原因而不是寻找解决方法。
  • 感谢 Péter 的输入,正如对 khmarbaise 答案的评论,我将对我的过程进行更深入的了解。无论如何感谢您的帮助!

标签: maven-2


【解决方案1】:

有没有办法告诉 maven(在做 mvn 包、mvn 站点或...时)不要从本地存储库中解析依赖项?

不,这就是整个依赖解析的工作方式(通过本地存储库)。

有时我会遇到问题,因为以前缓存的依赖项(例如 SomeProject-0.7-ALPHA)在远程存储库中不再可用。

很抱歉,从远程存储库中删除明显但删除依赖项是一种可怕的做法,并且会导致......以及您面临的那种麻烦。如果可能,请避免这样做。

一旦我与其他人共享我的 pom,他们可能会遇到麻烦,因为他们没有该依赖项的缓存版本,并且无法再从远程存储库解析该依赖项。

检查事情是否适用于其他人的一种方法是清除您要从本地存储库共享的项目的依赖项并重新解决它们。当然,手动执行此操作会非常痛苦,但好消息是 Maven Dependency Plugin 有一个 purge-local-repository 目标。

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:purge-local-repository  \
    -DreResolve=true \
    -DactTransitively=true \ 
    -Dverbose=true

如果这失败了,那么您就知道缺少某些东西并且无法再解决,这基本上就是您想知道的。但是您也丢失了它,因此如果这对您很重要,请备份您的存储库。

【讨论】:

  • 接受,因为 purge-local-repository 是我正在寻找的东西。希望我以后不再需要它。谢谢!
  • @Nils 不客气。如果您认为这个已接受的答案有意义,请随时 upvote too :)
  • 项目使用的插件怎么样。插件有清除吗? purge-local-repository 清除依赖项,而不是插件..
【解决方案2】:

maven 构建的基本测试是删除本地存储库 .m2/repository 并尝试构建(mvn 包)并查看它是否工作。如果没有,您还有其他问题。如前所述,问题似乎是您正在使用的过程。如果远程存储库不再提供依赖项,则存在其他问题。您是否使用存储库管理器,例如 Nexus、Archiva、Artifactory?

【讨论】:

  • 我也在考虑删除/移动整个本地存储库,事实上这就是我在某些情况下所做的,但这并不是最理想的。我没有使用存储库管理器。我正在使用的存储库不在我的控制之下。我将首先听取您的意见和关于我的流程的事情。我认为可能有一个标志可以关闭本地存储库,但我明白了,这只是一种解决方法......感谢您的帮助!
  • 没有标志可以关闭本地仓库的使用。如果您不亲自使用回购管理器,您应该考虑在公司中设置。您可以对本地存储库做的唯一事情就是更改位置,仅此而已。
  • +1 建议建立公司/项目回购 - 我正要提出相同的建议:-)
  • @khmarbaise 我不确定使用存储库管理器有什么帮助。我正在查看这个,因为我的工作场所确实有一个存储库管理器。实际上,我们有多个相互竞争的内部组与相互竞争的存储库管理器......不同的项目使用不同的存储库管理器,这取决于创建它们的组、创建时间等,因此经常会出现一些本地缓存依赖项 X从存储库管理器 A 下载,即使 this 项目的 pom 指定存储库管理器 B(您稍后会发现)不提供依赖项 X...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
相关资源
最近更新 更多