在maven项目中,有没有办法找到未明确指定版本的依赖项

时间:2017-12-28 07:20:43

标签: maven

我的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.antversion被明确提及为1.9.7。但是,对于org.apache.xmlbeans,会根据多个因素自动推断版本。虽然这是一个方便的功能,但当第三方库项目非常活跃并且可能有其他依赖项时,它也会使版本有时无法预测。

所以,问题是,我想找到所有 not 的依赖项明确指定version

我试过了help:effective-pom。它列出了所有子项目中的所有依赖项,但它也输出了推断的版本。

您可以说,我正在查看effective-pom的变体,它以递归方式列出所有子项目的所有依赖项,但除非另行明确指定,否则不会自动获取任何版本。一旦我有了这样的列表(以xml格式),我可以在xml输出上应用一些xqueries来过滤掉我想要的内容并进行必要的更改。

编辑: 我正在寻找没有<version>标签的依赖项。如果使用Ranges

指定范围,对我来说仍然好(?)

1 个答案:

答案 0 :(得分:0)

我不知道直接从Maven处理此问题的方法,但您可以尝试在整个POM文件中使用XPath。尝试使用此表达式:

//dependency[not(version)]

这将返回包含子节点<dependency>的所有<version>个节点。