未指定 Maven 插件版本

2022-09-01 23:27:40

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

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

我写了一个简单的pom.xml没有父母来尝试一下,所以插件管理不涉及。我还检查了maven-model-builder中的super super pom-4.0.0.xml,以确认maven-bundle-plugin不存在。此插件版本未在任何地方指定。

maven 如何确定要采用哪个版本?


答案 1

来自 Maven 3.x 兼容性说明

自动插件版本解析

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

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


答案 2

如果您检查远程存储库中的文件(例如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>

Maven 3.0.x对缺少插件版本发出警告,并说“Maven的未来版本可能会拒绝构建像这样的格式错误的POM”或类似的东西。您应该始终指定插件版本,以便您的构建是可重现的。否则,您可能会遇到一些很难找到的错误。


推荐