maven - 核心 Maven 插件是否与 Maven 本身处于相同的发布周期?

标签 maven maven-3

在网上的许多地方,我看到它讨论了要使 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 版本相关联。

我的问题:

  1. 插件版本是否与 Maven 本身处于同一发布周期?
  2. 是否有一组构成 Maven 版本的核心 Maven 插件?如果是,如何获得 Maven 版本的此类插件列表?
  3. 当我看到诸如 3.0.4 之类的 Maven 版本时,该版本是否包含一些核心插件,或者它是否始终获得最新的插件,例如在 Maven 3.0.4 发布后发布的 reactor?
  4. 有没有办法让 maven 使用在 3.0.4 发布时发布的插件?
  5. 如何表示不同插件版本之间的兼容性,是否有一些插件普遍遵循的约定,例如所有次要的 2.x 都相互兼容,但 3.x 与 2.x 不兼容?
  6. 指定插件版本号的做法真的是最佳害虫做法还是矫枉过正?

最佳答案

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.

具体回答您的问题:

  1. 不,他们不是。每个插件都有自己的发布周期。请参阅上面的示例。
  2. 有多种插件绑定(bind)到 Maven 的特定于包的生命周期阶段。您可以将这些视为“核心 Maven 插件”。看看 maven book获取完整列表。
  3. 如果您没有在 POM 文件中指定插件版本,maven 将使用每个已用插件的最新版本。
  4. 没有。如果这是您的要求,您可以在 http://search.maven.org 上找到插件的发布日期。并将它们与最新版本的 Maven 进行比较。但这不是必需的,如果您在 POM 文件中指定了每个使用的插件的版本,并且 Maven 会为您生成正确的 Artifact 。
  5. 不同的 maven 插件之间没有兼容性问题(至少没有我所知道的问题)。对于同一插件的不同版本,您必须尝试一下,看看您的特定项目是否适用于新版本的插件。
  6. 如果您想要可重现的构建,这是必须的。

关于maven - 核心 Maven 插件是否与 Maven 本身处于相同的发布周期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13184800/

相关文章:

java - maven依赖版本问题

apache - 构建失败 - Apache Parquet-MR 源(mvn 安装失败)

java - 如何设置私有(private)的、可远程访问的 Maven 存储库?

tomcat - 使用slf4j/logback时如何打包webapp?

java - 如何在没有(没有主 list 属性)的情况下为现有的 Maven 项目生成 jar 文件?

jenkins - 注入(inject)错误: public org. apache.maven.repository.internal.DefaultVersionResolver

java - 如何解决maven EnforcedBytecodeVersion失败?

java - 使用 Maven 构建 Spark : error finding javac (but path is correct)

maven - Maven 执法者是否忽略依赖管理部分?

macos - Mac OS X 上的 Maven 安装