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

Java 如何让Maven使用某些插件的最新版本?,java,maven-2,plugins,build,build-process,Java,Maven 2,Plugins,Build,Build Process,由于maven编译器插件v2.0.2中的一个错误,我损失了2个小时的时间,该错误在v2.3.2版本中得到了修复 显然,如果不指定Maven编译器插件的版本,Maven 2.2.1只会提供v2.0.2 我们的项目使用了15个以上的Maven插件。其中一些我们想确定一个特定的版本,但大多数(如编译器插件)我们想升级而不必考虑它 有没有一种方法可以让Maven自动做到这一点,或者我们必须让某人承担一项吃力不讨好的任务,每月研究可能的Maven插件升级,然后在我们的父POM中更改插件管理版本号?您可以将

由于maven编译器插件v2.0.2中的一个错误,我损失了2个小时的时间,该错误在v2.3.2版本中得到了修复

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

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


有没有一种方法可以让Maven自动做到这一点,或者我们必须让某人承担一项吃力不讨好的任务,每月研究可能的Maven插件升级,然后在我们的父POM中更改插件管理版本号?

您可以将类似的内容绑定到您的主构建中,这样您就可以获得每个构建的报告,其中显示您的插件是否是最新的

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


如果您想玩得开心,请让您的CI服务器通过脚本运行maven build的输出,以检查发出新版本信号的
[警告]
日志条目,然后让它通过电子邮件或其他通知通知您团队的相关成员。

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

尝试使用
-cpu
标志。来自
mvn-帮助的输出

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

Options:
 -cpu,--check-plugin-updates            Force upToDate check for any
                                        relevant registered plugins
用法:mvn[选项][] 选项: -cpu,--check插件更新强制更新任何 相关注册插件
您还可以在插件中使用版本范围

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

是的,自(请参阅)起,核心插件和通用插件的版本已在中固定,并且已禁用Maven插件版本发现,以确保构建的可再现性

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

如上所述,这是一个坏主意。您只是不希望maven构建因为插件更新而突然开始失败。换句话说,您应该使用固定版本,而不这样做是一种不良做法。实际上,Maven 3.0促进了这种做法,并警告您如果不这样做。在3.1中,必须指定一个版本(请参阅)

就我个人而言,我使用及其规则来实施这种做法(这意味着如果不锁定插件版本,构建将失败)

有没有一种方法可以让Maven自动完成这项任务,或者我们必须让某人承担一项吃力不讨好的任务,每月研究Maven插件升级的可能性,然后在我们的父POM中更改插件管理版本号

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

但真正的问题是:为什么你总是想使用终极版本?在我看来,这样做没有什么好的理由,只有在有东西需要修复的情况下,你才应该升级(“如果它没有坏,就不要修复它”)


一句话:使用固定插件版本,忘记自动更新、版本范围等。

这不直接适用,但maven3会在您没有提供插件版本号时发出警告,警告是为了向后兼容。@Jeremy不向后兼容的更改将出现在Maven 3.1中。与此同时,Maven 3.0帮助您修复POM。天哪……使用Maven已经2年多了,不知道我可以运行mvn版本:显示插件更新并获得所有有用的信息。它仍然需要手动完成,但这确实让它变得容易。mvn版本中的常规依赖项也一样:显示依赖项更新--谢谢。Baaaaaaad practice,不要这样做。@Pascal:你这么说很有趣。对于依赖性,我们的团队几乎同意这是一种值得付出的痛苦。但是与插件配合使用,这是一件坏事吗?这也向我提出了一个问题:如果这通常是一种不好的做法,那么它的用例是什么?在我看来,没有有效的用例(虽然Maven确实支持版本范围,但我相信它不鼓励使用它们)。理论上,如果人们遵守版本控制标准(比如来自Apache的标准)然后可以可行地使用一个合理的范围(比如直到下一个小版本)。然而,我认为问题在于没有遵守标准。尽管如此,我明白你的观点,并会在99%的用例中阻止它们-我只是希望更好地坚持正确的版本控制,这样范围就可以更有用。在我看来,最大的问题不是真正的版本解析(这在遵循你指出的标准时可以起作用),问题是,版本范围可能会导致不必要的构建行为更改,查找此类问题是一件痛苦的事情(您无法区分POM,您无法轻松恢复到工作状态)。版本范围是通往地狱之门的入口。FWIW,这个选项在Maven 3.0中被弃用。+1为此:“就个人而言,我使用Maven Enforcer插件和它的Require Plugin Versions规则来实施这个实践(这意味着如果你不锁定插件版本,构建将失败)。@javamonkey79:这是我最喜欢的插件之一。我在所有构建中都使用它。