我刚刚为一个项目编辑了<repositories />
我的pom.xml
文件部分,删除了几个我认为不需要的 repo。
我想验证声明的依赖项在可用存储库中是否仍然可以解析。
但是,所有声明的依赖项都在我的本地仓库中可用,因此任何构建尝试都只会使用本地的。
我不想简单地破坏我的本地存储库,因为从头开始下载所有依赖项需要很多小时。
同样,我对让 maven 尝试下载所有依赖项不感兴趣,我只是希望它确保它们都是可解析的(包括传递依赖项)。
我该怎么做呢?
跑
mvn dependency:analyze
它将为您检查依赖项。
参考: http ://maven.apache.org/plugins/maven-dependency-plugin/analyze-mojo.html
我可以说的第一件事是不要在 pom 中定义存储库,因为它会导致很多问题,特别是对于使用这个项目的其他人。此外,我建议使用存储库管理器,它可以解决问题并提高下载过程中的性能,并简化对这种情况的检查,这意味着只需删除本地存储库并尝试构建。
清空本地仓库似乎是唯一的选择。此链接可能有助于防止 Maven 解决本地存储库中的依赖关系。
清空你的本地仓库(rm -rf ~/.m2/repository)并构建。
您无法解决这个耗时的问题。如果不下载特定的工件,就无法知道它是否在特定的外部仓库中。如果 maven 只是问“你有 X 吗?” 您会从损坏的工件中得到误报,这在某些存储库中很常见。
我假设您已经尝试过 mvn validate -U ?我不是很棒的 Maven 专家,但这就是我要尝试的。(尽管我经常爆破我的本地非第三方报告,以确保该构建对其他人有效)。
好吧,如果您愿意敲出自己的插件,那么想到的就是让插件仅解析校验和。这些校验和仅在已经部署了相应的 jar/war/zip/whatever 工件之后才部署到远程存储库。
如果下载所有工件需要几个小时,那么您显然需要一个存储库管理器,例如 Nexus 或 Artifactory,就像 Karl-Heinz 已经建议的那样。它将保留远程工件的缓存版本,从中下载将是时间问题。
也许这不是答案,但由于某种原因,我在 pom 文件中有 html,所以有时我会在开始时将 Mvn 依赖项添加到 pom.xml:
<repositories>
<repository>
<id>mvn</id>
<name>mvn</name>
<url>http://maven.icm.edu.pl/artifactory/repo/</url>
</repository>
...other resps
并删除整个 .m2/repositories 目录,或者我使用以下命令搜索损坏的文件:
grep -R -l -L groupId --include \*.pom //Search all that not contain groupId string
(在 .m2 目录中执行此操作)