由于版本v2.3.2中修复了maven-compiler-plugin v2.0.2中的错误,我只丢失了2个小时的时间。
显然,如果您没有指定Maven编译器插件的版本,Maven 2.2.1只会为您提供v2.0.2。
我们的项目使用15个以上的Maven插件。其中一些我们想要确定某个版本,但大多数(比如编译器插件)我们想升级而不必考虑它。
有没有办法在Maven中自动执行此操作,或者我们是否必须指派某人每月研究可能的Maven插件升级,然后在我们的父POM中更改PluginManagement版本号的费力不讨好的任务?
答案 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之类的内容绑定到主要版本,以便获得每个版本的报告,以显示您的插件是否是最新的。
的详细信息,请参阅此链接如果您想获得想象力,请让您的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)
您也可以在插件中使用版本范围。