Настройте версию плагина maven без изменения pom.xml вручную

описание проблемы

Я работаю с коллекцией старых проектов из дефектов4j. Теперь моя проблема заключается в том, что, поскольку я хочу объединить эти проекты с более новым плагином 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) требует надежной версии 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

Предпринятые усилия

Я проверил несколько сообщений stackoverflow, и они говорили о эффективный помпон. Когда я запускаю mvn help:effective-pom, я вижу, что используется версия surefire:

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

Вопрос

Поскольку коллекция проектов в дефектах4j не указывает надежную версию в своем pom.xml, есть ли способ указать надежную версию, используемую для 2.14 или выше, из командной строки? Я хочу предотвратить ручное редактирование pom каждый раз.

Обновлять

запустив mvn dependency:resolve-plugins, я получаю

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

Так что мне кажется, что каким-то образом maven использует 2.12.4 по умолчанию. Причина может быть в том, что я использовал эту версию ранее. Как я могу это исправить? Без изменения pom вручную?

Любой совет будет приветствоваться!

Обновлять:

Проблема решена путем редактирования файла maven super pom.

Вы должны определить версию в файле pom, иначе вы не получите воспроизводимого поведения... Редактирование Super - действительно плохая идея...

khmarbaise 09.04.2022 11:04

@khmarbaise Причина, по которой я не хочу редактировать файл pom, заключается в том, что я хотел бы автоматизировать процесс. Я буду проводить эксперименты, и вариантов проекта очень много.

codeMike 09.04.2022 11:19
Основы программирования на Java
Основы программирования на Java
Java - это высокоуровневый объектно-ориентированный язык программирования, основанный на классах.
Концепции JavaScript, которые вы должны знать как JS программист!
Концепции JavaScript, которые вы должны знать как JS программист!
JavaScript (Js) - это язык программирования, объединяющий HTML и CSS с одной из основных технологий Всемирной паутины. Более 97% веб-сайтов используют...
0
2
38
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я больше 4 лет не работаю с помпонами, поэтому всего не помню, но учту пару вещей.

Во-первых, поскольку pom, который вы показываете, не указывает используемую версию surefire, я не думаю, что версия 2.12.4 может исходить из этого напрямую. Попробуйте получить дерево зависимостей, чтобы увидеть, откуда берутся вещи. Попробуйте Как вы можете отобразить дерево зависимостей Maven для *плагинов* в вашем проекте? для этого и нескольких других предложений.

Во-вторых, я думаю, что помню, что в вашем собственном pom вы должны иметь возможность указать версию плагина для связи с зависимостью, которая ее не указывает. Вам придется исследовать этот вариант самостоятельно.

Я думаю, что ваш лучший выбор - это дерево зависимостей, чтобы найти, что использует, что и откуда. Если вы получили дерево и все еще не можете понять, что делать, попробуйте добавить вывод дерева к своему вопросу. (Вы можете отредактировать части, которые являются собственностью или явно не связаны.)

@codeMike Поблагодарите меня, когда ввод приведет вас к чему-то полезному. :-)

Sinc 09.04.2022 06:14
Ответ принят как подходящий
  1. Maven берет самую новую версию из репозитория, если в вашем POM, родительском POM или супер POM (от которого наследуется каждый проект Maven) не было исправленной версии.

  2. Лучше всего исправить версию «вручную» в POM. Лучшее место для этого — родительский POM, от которого наследуются проекты (это означает, что можно изменить только одно место).

  3. Вы не можете просто указать версию из командной строки. Если только вы не сделаете некоторые трюки, например, поместите <version>${surefire.version}</version> в определение плагина и установите это свойство из командной строки.

Другие вопросы по теме