从maven 3开始,强烈建议指定插件的版本。例如,指定maven-compiler-plugin(为了指定java目标版本),如果未指定版本,maven会抱怨:
[WARNING] Some problems were encountered while building the effective model for com.example:ex1:jar:0.0.1-SNAPSHOT
[WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-compiler-plugin is missing. @ line 20, column 12
[WARNING]
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING]
[WARNING] For this reason, future Maven versions might no longer support building such malformed projects.
我可以理解这个的逻辑:
如果我没有指定maven-compiler-plugin,我会得到一个默认版本,对于maven 3.0.4是2.3.2。这意味着在正常情况下,您将获得一个插件的默认版本。
问题:插件的默认版本可以随时间变化吗?我是这么认为的,例如maven 4.x可能使用较新的默认版本的编译器插件。
如果是这种情况,那么强制用户指定版本有什么好处?在许多情况下,无论如何都会无法预测,只关注pom.xml,事先知道将使用什么maven版本,也就是使用maven插件版本。
我没有得到这背后的逻辑。因此,应始终强制指定正在使用的每个插件的版本(这将非常麻烦)。
答案 0 :(得分:2)
插件的默认版本是Maven发行包的一部分。因此,它们在发行版之间存在差异。这意味着Maven的切换版本可能会给你一个令人讨厌的惊喜。 Maven开发社区认为这是一个糟糕的计划;您应该能够在不损失构建可重复性的情况下更改Maven的次要版本(当然,除了错误)。所以,我们提出这个警告,轻轻地鼓励你锁定你的插件版本。