当您不指定任何插件时,Maven 如何决定使用哪个版本的插件?

Bla*_*Eye 4 maven-plugin maven maven-central maven-metadata

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

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

我什至记得一些插件,其中最新版本比 Maven 决定使用的版本高出几个小版本。

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

Flo*_*ian 6

据我所知,此链接将回答您的问题。

自动插件版本解析

当在 POM 或命令行中没有给出明确版本的情况下调用插件时,Maven 2.x 通常会选择可用的最新版本,其中最新版本可以是发行版或快照。为了稳定性,Maven 3.x更喜欢最新的发布版本而不是最新的快照版本。

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

  • 我希望这能回答我的问题。例如,当我现在使用 Maven 3.3.9 进行 mvn 编译时,它需要 maven-compiler-plugin 2.3.2,但 3.6.1 是最新版本(以后有 11 个版本)。 (4认同)

Lai*_*son 5

我知道这是一个古老的线程,但为了后代和准确性:所有pom.xml的逻辑都是从超级 POM继承的。您始终可以pom.xml通过键入以下内容来查看“真实”的样子:

mvn help:effective-pom
Run Code Online (Sandbox Code Playgroud)

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 )。

  • 至少从 Maven 2 开始,它是这样的:https://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Super_POM;向下滚动,经过第一个 XML 毛团,到达第二个。不过,您关于 Maven 3 super POM 中缺少它的观点是一个很好的观点;我看看能否找到它。 (2认同)
  • Maven 3超级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)。它加载的资源可以在这里找到:https://github.com/apache/maven/blob/bce33aa2662a51d18cb00347cf2fb174dc195fb1/maven-model-builder/src/main/resources/org/apache/maven/model/pom-4.0.0 .xml#L23-L149 (2认同)