在网上的很多地方,我看到它讨论过要使 maven 构建可重现,明确指定所有使用的插件的版本号很重要,这样更新的插件就不会破坏构建。推荐的方法似乎是使用强制插件。以下是我在网上找到的复制和粘贴设置。
<execution>
<id>enforce-plugin-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requirePluginVersions>
<message>Best Practice is to always define plugin versions!</message>
<banLatest>true</banLatest>
<banRelease>true</banRelease>
<banSnapshots>true</banSnapshots>
<phases>clean,deploy,site</phases>
<additionalPlugins>
<additionalPlugin>org.apache.maven.plugins:maven-eclipse-plugin</additionalPlugin>
<additionalPlugin>org.apache.maven.plugins:maven-reactor-plugin</additionalPlugin>
</additionalPlugins>
<unCheckedPluginList>org.apache.maven.plugins:maven-enforcer-plugin,org.apache.maven.plugins:maven-idea-plugin</unCheckedPluginList>
</requirePluginVersions>
</rules>
</configuration>
</execution>
当我运行 pom 时,我从强制插件插件中收到以下错误。
[INFO] --- maven-enforcer-plugin:1.1.1:enforce (enforce-plugin-versions) @ seedling ---
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequirePluginVersions failed with message:
Some plugins are missing valid versions:(LATEST RELEASE SNAPSHOT are not allowed )
org.apache.maven.plugins:maven-clean-plugin. The version currently in use is 2.4.1
org.apache.maven.plugins:maven-deploy-plugin. The version currently in use is 2.7
org.apache.maven.plugins:maven-install-plugin. The version currently in use is 2.3.1
org.apache.maven.plugins:maven-site-plugin. The version currently in use is 3.0
org.apache.maven.plugins:maven-reactor-plugin. The version currently in use is 1.0
org.apache.maven.plugins:maven-eclipse-plugin. The version currently in use is 2.9
Best Practice is to always define plugin versions!
在我看来,一些插件,如 maven-clean-plugin、maven-install-plugin、maven-reactor-plugin 是 maven 的核心核心部分,我应该将这些“核心”插件的版本绑定到我正在使用的 Maven 版本。
我的问题:
- 插件版本是否与 Maven 本身在同一发布周期?
- 是否有一组核心 Maven 插件组成一个 Maven 版本?如果是,如何获取 Maven 版本的此类插件列表?
- 当我看到诸如 3.0.4 之类的 maven 版本时,该版本是否包含一些核心插件,或者它是否总是会获得最新的插件,例如在 maven 3.0.4 发布之后发布的 reactor?
- 有没有办法说 maven 使用在 3.0.4 发布时发布的插件?
- 如何表示不同插件版本之间的兼容性,是否有一些插件普遍遵循的约定,例如所有次要 2.x 都相互兼容但 3.x 与 2.x 不兼容?
- 指定插件版本号的做法真的是最好的害虫做法还是只是矫枉过正?