Java 为什么maven 2尝试下载我已经拥有的依赖项?

Java 为什么maven 2尝试下载我已经拥有的依赖项?,java,maven-2,Java,Maven 2,当我启动“mvn安装”命令时,maven有时会尝试下载它已经下载的依赖项。快照应该是这样的,但是为什么maven会对其他JAR这样做呢 我知道我可以通过“-o”标志来避免这种行为,但我只是想知道原因是什么。我会查找没有指定版本号的依赖项。Maven将定期检查以确保其拥有这些工件的最新版本。这可能不是您看到的,但在过去,我必须手动将工件安装到本地存储库中,如果您忘记包含-Dgenerate.pom=true选项,则该工件的repo中将没有pom,Maven将转到central(以及您配置的任何其他

当我启动“mvn安装”命令时,maven有时会尝试下载它已经下载的依赖项。快照应该是这样的,但是为什么maven会对其他JAR这样做呢


我知道我可以通过“-o”标志来避免这种行为,但我只是想知道原因是什么。

我会查找没有指定版本号的依赖项。Maven将定期检查以确保其拥有这些工件的最新版本。

这可能不是您看到的,但在过去,我必须手动将工件安装到本地存储库中,如果您忘记包含-Dgenerate.pom=true选项,则该工件的repo中将没有pom,Maven将转到central(以及您配置的任何其他远程repo)尝试在每个版本上下载pom。

当我们讨论这个主题时,我在Maven 2.0.x中遇到了一个主要错误。在脱机模式下,maven仍将尝试下载最新的快照,当它找不到您的快照repo时,它将导致构建失败。想象一下,当这种情况发生在一个客户的网站上,你只需要做一个小的改变(但我离题了),随之而来的欢笑

以下是错误: 这里有一个解决方法:
对于我来说,-o标志仍然不起作用,但这确实起到了作用:

find ~/.m2/repository -name '_maven*' | xargs rm
find ~/.m2/repository -name '*lastUpdated' | xargs rm

这将删除本地repo中的所有.lastUpdated和_maven.repositories文件。我遇到这个问题是因为我们有一个无法实现的公司Nexus回购协议,我需要做一些工作。使用Eclipse的Maven集成也可能促成了这一点

它也可能是插件的更新,所以在插件上指定版本也会有所帮助。。。我想我一般把它们包括在“依赖项”中。您还必须认识到,生命周期阶段通常绑定到特定的插件。谁为他们的编译器插件指定了一个版本号?依赖项必须指定一个版本。插件没有,但你应该。原因如下:这是在2.0.10中修复的:事实上,根据我的经验,Maven 2.0.x充满了bug,当时我认为它根本不值得使用。我不记得是2.1.x还是2.2.x,但肯定是2.0后的版本让我第一次接受,然后爱上了Maven