在网上的许多地方,我看到它讨论了要使 maven 构建可重现,明确指定所有使用的插件的版本号很重要,这样更新的插件就不会破坏构建。推荐的方法似乎是使用 enforcer 插件。下面是我在网上找到的复制粘贴设置。
<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 时,我从 enforcer 插件中收到以下错误。
[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 不兼容?
- 指定插件版本号的做法真的是最佳害虫做法还是矫枉过正?
最佳答案
Maven 将一些插件绑定(bind)到它的生命周期阶段,例如maven-compiler-plugin 到 compile
阶段,maven-install-plugin 到 install
阶段等等。这些是您所说的“maven 的核心中心部分”的插件。但是,这些插件有一个单独的发布周期。例如,查看绑定(bind)到 Maven 的 deploy
生命周期阶段的 maven-deploy-plugin。最新的版本(2.7)是2011年10月,而最新的Maven版本(3.0.4)是2012年1月。再比如maven-compiler-plugin,它的最新版本是2012年6月,距Maven发布半年3.0.4.
具体回答您的问题:
- 不,他们不是。每个插件都有自己的发布周期。请参阅上面的示例。
- 有多种插件绑定(bind)到 Maven 的特定于包的生命周期阶段。您可以将这些视为“核心 Maven 插件”。看看 maven book获取完整列表。
- 如果您没有在 POM 文件中指定插件版本,maven 将使用每个已用插件的最新版本。
- 没有。如果这是您的要求,您可以在 http://search.maven.org 上找到插件的发布日期。并将它们与最新版本的 Maven 进行比较。但这不是必需的,如果您在 POM 文件中指定了每个使用的插件的版本,并且 Maven 会为您生成正确的 Artifact 。
- 不同的 maven 插件之间没有兼容性问题(至少没有我所知道的问题)。对于同一插件的不同版本,您必须尝试一下,看看您的特定项目是否适用于新版本的插件。
- 如果您想要可重现的构建,这是必须的。
关于maven - 核心 Maven 插件是否与 Maven 本身处于相同的发布周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184800/