Maven插件版本未指定



我刚刚注意到插件的版本在maven中是可选的。我仍然可以构建我的模块而不指定它。以maven-bundle-plugin为例。

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    ....
</plugin>

我写了一个简单的pom.xml,没有父节点,所以不涉及pluginManagement。我还检查了maven-model-builder中的超级超级pom-4.0.0.xml,以确认没有maven-bundle-plugin。这个插件的版本没有指定。

maven如何决定使用哪个版本?

来自Maven 3。x兼容性说明:

自动插件版本分辨率

当调用插件时,没有在POM中给出显式的版本或者在命令行上,Maven 2。X过去总是选择最新的版本可用的最新版本可以是一个发行版或一个快照。为了稳定起见,Maven 3。X更喜欢最新的

鉴于…的威胁自动插件版本强加的不可复制构建解决方案,该功能计划在插件中删除有关POM中的声明。Maven 3的用户。X会找到它当检测到缺少插件版本时输出警告鼓励将插件版本添加到POM或其中一个插件版本父酸盐。可以使用强制执行规则requirePluginVersions另外检查POM中缺少的插件版本。

如果您检查远程存储库(例如Nexus)中的maven-metadata.xml文件以及插件工件,您将看到如下内容:

<metadata>
    <groupId>com.company.maven.plugins</groupId>
    <artifactId>some-maven-plugin</artifactId>
    <versioning>
      <latest>0.3.6</latest>
      <release>0.3.6</release>
      <versions>
        <version>0.1</version>
        <version>0.2</version>
        <version>0.3.0</version>
        <version>0.3.1</version>
        <version>0.3.2</version>
        <version>0.3.4</version>
        <version>0.3.5</version>
        <version>0.3.6</version>
      </versions>
      <lastUpdated>20140414212942</lastUpdated>
    </versioning>
  </metadata>

我认为如果没有指定版本,Maven可能会使用<latest>值来决定下载哪个插件。

3.0 Maven。x给出了缺少插件版本的警告,并说"Maven的未来版本可能会拒绝构建像这样的畸形pom"或类似的东西。您应该始终指定插件版本,以便您的构建是可复制的。否则你可能会遇到一些很难发现的bug。

maven遵循几个步骤来解决插件版本问题。Resolving Plugin Versions部分记录罢工http://maven.apache.org/guides/introduction/introduction-to-plugin-registry.html

文档似乎已经移动了,因为这篇文章的7年。它在Maven 3上可用。@ceilfors在他的回答中提到的x兼容性说明

最新更新