当你没有指定任何插件时,Maven如何决定使用什么版本的插件?

时间:2015-10-27 15:03:42

标签: maven maven-plugin maven-central maven-metadata

我认识到Maven并不总是使用最新版本的插件。

例如,org.codehaus.mojo:sonar-maven-plugin版本2.7已于10月19日发布,但在10月23日,Maven仍然使用了2.6(mvn sonar:sonar)。

我甚至还记得一些插件,其中最新版本是Maven决定使用的版本之上的几个小版本。

是否有任何(中央)索引/列表/数据库,其中Maven查找要使用的版本?如果是,可以手动访问哪里?

3 个答案:

答案 0 :(得分:4)

据我所知,link会回答你的问题。

  

自动插件版本解析

     

在没有POM中给出的显式版本的情况下调用插件时   或者在命令行中,Maven 2.x用于选择最新版本   最新版本可以是发布版本还是版本   快照。为了稳定起见,Maven 3.x更喜欢最新的   发布最新快照版本的版本。

     

鉴于自动施加的不可重现的构建的威胁   插件版本解析,此功能计划删除为   就POM中的插件声明而言。 Maven的用户   当检测到丢失的插件版本时,3.x会发现它会输出警告,以鼓励将插件版本添加到POM或   其中一个父POM。 Enforcer规则requirePluginVersions可以   另外用于检查POM中缺少的插件版本

答案 1 :(得分:2)

我知道这是一个古老的线索,但为了后代和准确性:所有pom.xml逻辑上都继承自super POM。您可以通过输入以下内容来查看“真实”pom.xml的外观:

mvn help:effective-pom

打印的结果pom.xml是超级POM,您的pom.xml的组合,当然还有混合中的任何父POM。

超级POM由org.apache.maven.model.superpom.DefaultSuperPomProvider类(https://github.com/apache/maven/blob/bce33aa2662a51d18cb00347cf2fb174dc195fb1/maven-model-builder/src/main/java/org/apache/maven/model/superpom/DefaultSuperPomProvider.java#L56-L85)提供。它加载的资源是org/apache/maven/model/pom-4.0.0.xmlhttps://github.com/apache/maven/blob/bce33aa2662a51d18cb00347cf2fb174dc195fb1/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0.xml#L23-L149)。

答案 2 :(得分:1)

对于命令行执行,如果未指定版本,Maven将从GA(组ID /工件ID)maven-metadata.xml文件中查找最新版本。

示例:http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-clean-plugin/maven-metadata.xml

如果您将Maven目标的命令行执行编码到您的构建中,您应该为这些构建指定版本,否则您的构建可能会随着新版本的插件的发布而发生变化。