我的java maven项目包含一堆子项目,如下所示
|- parent |- core |- db |- xml |- util |- config
在所有项目的pom.xml
文件中,定义了几个依赖项。但是,仅针对其中一些,指定了<version/>
。例如
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.7</version>
</dependency>
<dependency>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
</dependency>
</dependencies>
</dependencyManagement>
正如你所看到的,对于org.apache.ant
,version
被明确提到为1.9.7
。但是,对于org.apache.xmlbeans
,会根据几个因素自动推断出版本。虽然这是一个方便的功能,但当第三方库项目非常活跃并且可能具有其他依赖项时,它也会使版本有时无法预测。
所以,问题是,我想找到所有没有明确指定version
的依赖项。
我试过help:effective-pom
。它列出了所有子项目中的所有依赖项,但它也输出了推断的版本。
您可以说,我正在查看effective-pom
的变体,它以递归方式列出所有子项目的所有依赖项,但除非另行明确指定,否则不会自动获取任何版本。一旦我有这样的列表(以xml格式),我可以在xml输出上应用一些xqueries来过滤掉我想要的内容并进行必要的更改。
编辑:我正在寻找没有<version>
标签的依赖项。如果使用Ranges指定范围,对我来说仍然可以(?)
我不知道直接从Maven处理这个问题的方法,但您可以尝试在整个POM文件中使用XPath。尝试使用此表达式:
//dependency[not(version)]
这将返回所有不包含子节点<dependency>
的<version>
节点。