未指定Maven插件版本

问题描述 投票:18回答:3

我刚刚注意到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如何确定采取哪个版本?

java maven maven-3 maven-plugin
3个回答
21
投票

Maven 3.x 兼容性说明:

自动插件版本解析

当一个插件在POM或命令行中没有给出明确的版本时,Maven 2.x会选择可用的最新版本,而最新版本可以是发布版本或快照版本。为了稳定起见,Maven 3.x更倾向于使用最新的发布版本,而不是最新的快照版本。

考虑到自动插件版本解析对不可复制的构建造成的威胁,就POM中的插件声明而言,这一功能将被取消。Maven 3.x的用户会发现,当检测到缺失的插件版本时,它会输出一个警告,以鼓励将插件版本添加到POM或其父POM中。Enforcer规则requirePluginVersions可以用来额外检查POM中是否有丢失的插件版本。


3
投票

如果你检查到 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 "或类似的东西。 你应该总是指定插件的版本,这样你的构建才是可重复的。 否则你可能最终会发现一些非常难以发现的bug。


0
投票

maven有几个步骤来解决插件版本问题。它的记录如下 Resolving Plugin Versions 的部分http:/maven.apache.orgguidesintroductionintroduction-to-plugin-registry.html。

自本帖发表7年以来,文件似乎已经被转移。它可以在 Maven 3.x 兼容性说明 正如@ceilfors在回答中提到的。

© www.soinside.com 2019 - 2024. All rights reserved.