Выполнить одну цель плагина Maven как последнюю

#maven

#maven

Вопрос:

Я хотел бы запускать одну цель плагина Maven (jacoco: dump) при каждой сборке Maven моего проекта, независимо от фазы сборки, и это должна быть последняя выполненная цель.

Одна идея, которую я бы реализовал, — связать цель jacoco: dump с фазой компиляции, чтобы выполнять ее при каждой сборке, но тогда было бы невозможно выполнить дамп как последнюю цель последней фазы.

Порядок выполнения

 validate -> compile -> (any other phase and plugin goal execution) -> jacoco:dump
  

Так что, если я создаю с mvn verify , jacoco:dump может быть выполнено после фазы проверки; если я создаю с mvn compile jacoco:dump , может быть выполнено после фазы компиляции и т.д.

Есть ли какой-нибудь способ решить эту проблему с помощью Maven?

Спасибо

Ответ №1:

Один (хакерский) подход заключался бы в том, чтобы каждый раз передавать фазу как свойство. Что-то вроде:

  <execution>
    <id>jacoco</id>
    <phase>${phase}</phase>
    <goals>
      <goal>dump</goal>
    </goals>
  </execution>
  

Вызов с mvn compile -Dphase=compile помощью или mvn test -Dphase=test и т. Д. Вероятно, не самое элегантное решение, но довольно простое в реализации.

Комментарии:

1. Спасибо. И что вы думаете, если я использую непосредственно цель плагина? Нравится mvn test jacoco:dump . Как указано здесь , порядок выполнения — это тот, который указан в командной строке, поэтому, если я выполню jacoco:dump все требуемые этапы, возможно, у меня есть решение. Что вы думаете?

2. Да, это звучит лучше!

Ответ №2:

Решение простое, но эффективное. Мы можем запустить цель плагина непосредственно из командной строки, не настраивая ее в project pom. Как указано в официальной документации, при запуске нескольких целей из командной строки они выполняются в заданном порядке, поэтому мне нужно только поместить плагин jacoco в конец команды:

 mvn compile org.jacoco:jacoco-maven-plugin:0.7.7.201606060606:dump sonar:sonar
  

Приведенный выше пример сначала компилируется, затем выполняется jacoco:dump , затем выполняется sonar:sonar