代码之家  ›  专栏  ›  技术社区  ›  Dave

如何让Maven使用某些插件的最新版本?

  •  2
  • Dave  · 技术社区  · 14 年前

    因为在版本2.3.2中修复了maven编译器插件v2.0.2中的一个错误,我损失了2个小时的时间。

    显然,如果您不指定Maven编译器插件的版本,Maven 2.2.1只提供了v2.0.2。

    我们的项目使用15个以上的Maven插件。其中一些我们想确定一个特定的版本,但其中大多数(像编译器插件)我们想升级而不必考虑它。

    有没有一种方法可以用Maven自动完成这项工作,或者我们必须给某人分配一个费力不讨好的任务,即每月研究Maven插件可能的升级,然后在父POM中更改插件管理版本号?

    4 回复  |  直到 14 年前
        1
  •  6
  •   nyronium whaley    7 年前

    你可以系上 versions-maven-plugin 到您的主构建,这样您就可以得到每个构建的报告,显示您的插件是否是最新的。

    有关如何执行以下操作的详细信息,请参见此链接: Display Plugin Updates

    如果您想得到更多信息,请让您的CI服务器通过脚本运行maven构建的输出,以检查 [WARNING] 记录表示新版本的条目,然后让它通过电子邮件或其他通知通知团队的相关成员。

        2
  •  7
  •   Pascal Thivent    14 年前

    显然,如果您不指定Maven编译器插件的版本,Maven 2.2.1只提供了v2.0.2。

    是的,截至 Maven 2.0.9 (见 MNG-3395 )核心和通用插件的版本在 super POM 为了 建立再现性 .

    我们的项目使用15个以上的Maven插件。其中一些我们想确定一个特定的版本,但其中大多数(像编译器插件)我们想升级而不必考虑它。

    正如上面暗示的,这是个坏主意。您只是不希望maven构建突然因为一些插件更新而开始失败。换句话说,您应该使用固定版本,而不这样做是 坏习惯 . 实际上,Maven 3.0提倡这种做法,如果你不这样做,它会警告你。在3.1中, 必须指定版本 (见 MNG-1968 ).

    就我个人而言,我使用 Maven Enforcer Plugin 以及 Require Plugin Versions 执行此实践的规则(这意味着如果不锁定插件版本,生成将失败)。

    有没有一种方法可以用Maven自动完成这项工作,或者我们必须给某人分配一个费力不讨好的任务,即每月研究Maven插件可能的升级,然后在父POM中更改插件管理版本号?

    正如所建议的那样 Versions Maven Plugin 目标允许检查是否有插件、依赖项等的最新版本(注意 -cpu 已在Maven 3.0中弃用,并将从将来的版本中删除)。

    但真正的问题是:为什么你总是想使用终极版本?IMO,没有很好的理由这样做,你应该升级只有当有东西要修复的时候( “如果没有坏,就不要修” ).

    底线:使用固定的插件版本,忘记自动更新、版本范围等。

        3
  •  5
  •   Sean Patrick Floyd    14 年前

    今天我第二次写这篇文章时:

    尝试使用 -cpu 旗帜。输出 mvn -help :

    usage: mvn [options] [<goal(s)>] [<phase(s)>]
    
    Options:
     -cpu,--check-plugin-updates            Force upToDate check for any
                                            relevant registered plugins
    
        4
  •  2
  •   javamonkey79    14 年前

    您也可以在插件中使用版本范围。