配置 maven 插件版本,无需手动更改 pom.xml

Configure maven plugin version without changing pom.xml manually

问题描述

我正在处理来自 defects4j 的一组旧项目。我现在的问题是,由于我想将这些项目与更新的 maven 插件(一种回归测试工具)结合起来,因此 maven surefire 插件版本存在一些问题。

项目附带的pom.xml中,没有surefire版本的规格:

  <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <executions>
          <execution>
            <id>plain</id>
            <configuration>
              <includes>
                <include>**/*Test.java</include>
              </includes>
              <runOrder>random</runOrder>
            </configuration>
          </execution>

        </executions>
      </plugin>

但是,回归工具(制作成maven插件)需要surefire 2.14及以上版本。所以我得到这样的错误:

[ERROR] Failed to execute goal edu.illinois:starts-maven-plugin:1.4-SNAPSHOT:select (default-cli) on project commons-lang: Unsupported Surefire version: 2.12.4. Use version 2.13 and above

努力完成

我检查了几个 Whosebug 帖子,他们谈到了 有效的 pom。当我运行mvn help:effective-pom时,可以看到使用的surefire版本是

  <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.12.4</version>

问题

由于defects4j中的项目集合没有在他们的pom.xml中指定surefire版本,有没有办法从命令中指定用于2.14或更高版本的surefire版本线?我想防止每次都手动编辑pom。

更新

通过运行宁mvn dependency:resolve-plugins,我得到

Plugin Resolved: maven-surefire-plugin-2.12.4.jar

所以在我看来,maven 默认使用 2.12.4。原因可能是我以前使用过这个版本。我该如何解决? 不手动修改pom?

欢迎任何建议!

更新:

问题通过编辑maven的super pom解决。

我已经 4 年多没有使用 poms 了,所以不记得所有的事情,但考虑一些事情。

首先,由于您显示的 pom 没有指定要使用的 surefire 版本,我认为 2.12.4 版本不能直接来自该版本。尝试获取依赖树以查看事物的来源。尝试 How can you display the Maven dependency tree for the *plugins* in your project? 和其他一些建议。

其次,我想我记得在您自己的 pom 中您应该能够指定插件的版本以与未指定依赖项相关联。您必须自己研究该选项。

我认为你最好的选择是依赖关系树来找到什么正在使用什么以及它们来自哪里。如果您得到了树,但仍然不知道该怎么做,请尝试将树输出添加到您的问题中。 (您可以删除专有或明显不相关的部分。)

  1. 如果您的 POM、父 POM 或超级 POM(每个 Maven 项目都从中继承)中没有固定版本,Maven 会从存储库中获取最新版本。

  2. 最佳做法是在 POM 中“手动”修复版本。最好的地方是项目继承的父 POM(这意味着只有一个地方可以更改)。

  3. 您不能仅从命令行提供版本。除非你做了一些技巧,比如将 <version>${surefire.version}</version> 放入插件定义并从命令行设置此 属性。