未指定Maven插件版本

时间:2013-06-21 15:50:08

标签: java maven maven-3 maven-plugin

我刚刚注意到插件的版本在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如何确定要采用的版本?

3 个答案:

答案 0 :(得分:14)

来自Maven 3.x Compatibility Notes

  

自动插件版本解析

     

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

     

鉴于威胁   自动插件版本强加的不可重现的构建   分辨率,此功能计划删除至插件   POM中的声明令人担忧。 Maven 3.x的用户会找到它   检测到缺少插件版本时输出警告   鼓励添加插件版本到POM或其中一个   父母POM。可以使用Enforcer规则requirePluginVersions   另外检查POM中是否缺少插件版本。

答案 1 :(得分:3)

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

<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”或类似的东西。您应该始终指定插件版本,以便您的构建可重现。否则你最终会遇到一些很难发现的错误。

答案 2 :(得分:0)

maven遵循以下几个步骤来解决插件版本。它记录在Resolving Plugin Versions部分中 http://maven.apache.org/guides/introduction/introduction-to-plugin-registry.html