27

所以,我正在尝试使用一些插件的最新版本。早些时候我使用了先决条件标签,但很多资源(示例)说它应该被视为已弃用,应该使用 maven-enforcer-plugin 代替。这是我的配置:

<plugin>
  <inherited>true</inherited>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <version>1.3.1</version>
  <executions>
    <execution>
      <id>enforce-maven-3</id>
      <goals>
        <goal>enforce</goal>
      </goals>
      <configuration>
        <rules>
          <requireMavenVersion>
            <version>3.0.4</version>
          </requireMavenVersion>
        </rules>
        <fail>true</fail>
      </configuration>
    </execution>
  </executions>
</plugin>

但是,当我运行mvn versions:display-plugin-updates时,我仍然会收到以下文本:

[ERROR] Project does not define required minimum version of Maven.
[ERROR] Update the pom.xml to contain
[ERROR]     <prerequisites>
[ERROR]       <maven>3.0</maven>
[ERROR]     </prerequisites>
[INFO]
[INFO] Require Maven 2.0.6 to use the following plugin updates:
[INFO]   maven-jar-plugin ................................................ 2.4
[INFO]   maven-shade-plugin ............................................ 1.7.1
[INFO]
[INFO] Require Maven 2.2.1 to use the following plugin updates:
[INFO]   maven-jar-plugin ................................................ 2.6
[INFO]
[INFO] Require Maven 3.0 to use the following plugin updates:
[INFO]   maven-shade-plugin .............................................. 2.3

改为使用先决条件标签。

4

3 回答 3

11

似乎此问题已在此处报告(感谢Aleksandr M发现此问题)。

显然,display-dependency-updates目标依赖于prerequisites元素找出当前项目所需的 Maven 版本,完全忽略了enforcer-plugin,即使prerequisites-tag 不应该正常使用,但它是必需的,以便让依赖插件按预期运行。

于 2015-04-02T09:00:43.793 回答
10

为避免出现此消息,我使用了最新版本的 versions-maven-plugin

mvn org.codehaus.mojo:versions-maven-plugin:2.7:display-plugin-updates

请注意,它仍然需要对除项目之外的所有项目使用maven-enforcer-pluginmaven-plugin,或者对带有打包prerequisites的项目使用标签。maven-plugin

于 2018-09-24T20:54:05.947 回答
-2

Maven 3.X 的先决条件已弃用:

http://jira.codehaus.org/browse/MNG-4840 http://jira.codehaus.org/browse/MNG-5297

此外,如果你打电话

 mvn versions:display-plugin-updates

您没有开始生命周期,而您的 maven-enforcer-plugin 的配置绑定到生命周期。

此外,您应该固定您在构建中使用的所有版本的插件。

还有一件非常重要的事情(摘自常见问题解答):

先决条件标签旨在供插件等工具使用。它适用于常规项目,但不会遗传给他们的孩子。如果它设置在父反应器中,那么 Maven 将进行检查。但是,如果其中一个孩子已建成,则不会执行检查。执行器插件旨在允许从单个“超级 pom”集中控制构建环境,并通过支持范围来允许版本规范的更大灵活性。

这意味着只有在您开发插件时,先决条件确实对使用 maven-enforcer-plugin 路径有一定的意义。对于通常的开发项目,使用 maven-enforcer-plugin 配置方式来强制特定的 Maven 版本。

为了随时了解插件更新,我建议订阅公告邮件列表,或者如果您想获得一个很好的概述,请参阅插件页面

于 2015-03-30T13:07:29.250 回答