如何定位请求缺失POM的POM?

12

当我构建我的项目时,我会收到以下警告:

[INFO] ------------------------------------------------------------------------
[INFO] Building XXX
[INFO] ------------------------------------------------------------------------
[WARNING] The POM for org.eclipse.update:org.eclipse.update.configurator:jar:3.2.0 is missing, no dependency information available
[WARNING] The POM for org.eclipse.emf:org.eclipse.emf.ecore:jar:2.3.2 is missing, no dependency information available
[WARNING] The POM for com.ibm.icu:com.ibm.icu:jar:3.4.4 is missing, no dependency information available

在我的构建中,我覆盖了这些依赖项的版本,构建本身成功了。

如何最快地修复警告?

更新:如何最快地找到包含这些版本的POM?

注意:我的本地仓库中有7000个POM。


更改您正在使用的依赖项的pom文件,或者使用其他版本,其中pom文件是正确的或甚至存在。 - khmarbaise
这明确说明你提供的依赖版本在本地仓库中不存在。要么放置正确的版本,要么尝试完全删除<version>元素。 - Arpit
@Aprit:我的项目POM文件中的版本是正确的,但是有一个传递依赖是错误的。我该如何找出是哪个依赖项呢?mvn dependecy:tree只显示最终版本,而不是被覆盖的版本。 - Aaron Digulla
3个回答

9

尝试使用dependency-plugin中的分析工具。

特别是使用mvn dependency:analyze-dep-mgt命令。


2
+1 是一个非常有用的命令。如果它能告诉我们是哪个 POM 导致了问题就更好了... - Aaron Digulla

3
一些可能有帮助的内容:
使用mvn dependency:tree -Dverbose=true可以查找未使用的重复/版本。但在某些情况下,它未显示有问题的jar文件 [? ]。它还不显示被省略的jar文件的后代,这可能有用也可能没有。
参考:http://jira.codehaus.org/browse/MDEP-123 Intellij可以列出它认为是有问题的pom和路径(打开pom.xml文件,将鼠标悬停在下划线的“project”上): intellij dependency list 不幸的是,对我来说,所有这些都不够。
然后我注意到,如果您从您的~/.m2/repository目录中删除有问题的目录,它将重新下载并基本上为空。因此,我认为这个错误消息有时可能意味着“您的Nexus列表了一个它实际上没有可供下载的版本”。似乎默认情况下,Maven会尝试下载所有已知版本的common-logging poms,然后在我的情况下,它显示了一个警告,但是没有任何问题。谢天谢地!
所以说,实际上,您的项目中可能没有指向有问题的pom(或有问题的版本等)。除了Nexus的元数据索引。

0
你可以使用 dependency:tree 命令来查看哪个 pom 引用了你缺失的依赖。

正如我多次所说的那样:它向我展示了构建使用的内容。构建是有效的。但是我仍然会收到警告,因为在其中某个地方,Maven查看了不属于最终类路径的POM文件。我该如何查看这些POM文件呢? - Aaron Digulla
显而易见的方法是从你的pom中删除覆盖,然后运行dependency:tree。这仍然比筛选7000个pom要好得多... 但是我认为dependencyManagement部分会覆盖而不会给出警告。 你有一个简单的例子可以生成这种类型的问题吗?我们可以运行一下吗? - Lionel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接