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

时间:2010-11-19 16:36:42

标签: java maven-2 plugins build build-process

由于版本v2.3.2中修复了maven-compiler-plugin v2.0.2中的错误,我只丢失了2个小时的时间。

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

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

有没有办法在Maven中自动执行此操作,或者我们是否必须指派某人每月研究可能的Maven插件升级,然后在我们的父POM中更改PluginManagement版本号的费力不讨好的任务?

4 个答案:

答案 0 :(得分:7)

  

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

是的,从Maven 2.0.9开始(请参阅MNG-3395),为了构建,在super POM和Maven禁用的插件版本发现中修复了核心和常见插件的版本再现性

  

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

如上所述,这是个坏主意。由于某些插件更新,您根本不希望maven构建突然开始失败。换句话说,你应该使用固定版本而不是这样做是不良做法。实际上,Maven 3.0推广了这种做法,如果你不这样做就会发出警告。在3.1中,您必须指定一个版本(请参阅MNG-1968)。

就个人而言,我使用Maven Enforcer Plugin及其Require Plugin Versions规则来强制执行此操作(这意味着如果不锁定插件版本,构建将失败)。

  

有没有办法在Maven中自动执行此操作,或者我们是否必须指派某人每月研究可能的Maven插件升级,然后在我们的父POM中更改PluginManagement版本号的费力不讨好的任务?

正如所建议的那样,Versions Maven Plugin的目标是允许检查是否有更新版本的插件,依赖项等(并注意在{3}}中不推荐使用-cpu,并且将从以后的版本中删除)。

但真正的问题是:你为什么要总是使用终极版本? IMO,没有充分的理由这样做,只有在需要修复的情况下才应升级(“如果没有损坏,请不要修复它”)。

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

答案 1 :(得分:6)

您可以将versions-maven-plugin之类的内容绑定到主要版本,以便获得每个版本的报告,以显示您的插件是否是最新的。

有关如何:Display Plugin Updates

的详细信息,请参阅此链接

如果您想获得想象力,请让您的CI服务器通过脚本运行您的maven构建的输出,以检查发出新版本信号的[WARNING]日志条目,然后通过电子邮件通知您团队的相关成员或其他一些通知。

答案 2 :(得分:5)

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

尝试使用-cpu标志。 mvn -help的输出:

usage: mvn [options] [<goal(s)>] [<phase(s)>]

Options:
 -cpu,--check-plugin-updates            Force upToDate check for any
                                        relevant registered plugins

答案 3 :(得分:2)

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