Подтвердить что ты не робот

Определение фазы выполнения Maven в плагине

У меня есть плагин, который преобразует скомпилированные классы. Это преобразование должно выполняться как для классов модулей, так и для классов тестирования модулей. Таким образом, я привязываю плагин к этапам процессов и фаз процессов-тестов. Проблема заключается в том, что мне нужно определить, в какой фазе находится плагин, поскольку я не могу (фактически не могу) преобразовать один и тот же набор классов дважды.

Таким образом, внутри плагина мне нужно будет знать, выполняю ли я процессы-классы, и в этом случае я трансформирую классы модулей. Или, если я выполняю процессы-тесты-классы, в которых я делаю, я не трансформирую классы модулей и не трансформирую только тестовые классы модуля.

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

Кажется, что что-то, что я мог бы достичь из моего модуля, должно быть в состоянии рассказать мне, что такое текущий этап. Я просто не могу, чтобы жизнь меня узнала, что это такое.

Спасибо...

4b9b3361

Ответ 1

Таким образом, внутри плагина мне нужно будет знать, выполняю ли я процессы-классы (...) или выполняю процессы-тесты-классы

AFAIK, это не совсем возможно.

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

Я не вижу ничего плохого в том, что у меня два кода обмена Mojos, но связаны с разными фазами. Что-то вроде Maven Compiler Plugin (и его целей compiler:compile и compiler:testCompile).

Ответ 2

вы не можете получить фазу, но вы можете получить идентификатор выполнения, который у вас есть как отдельный. В плагине:

/** 
 * @parameter expression="${mojoExecution}" 
 */
private org.apache.maven.plugin.MojoExecution execution;

...

public void execute() throws MojoExecutionException
{
    ...
    System.out.println( "executionId is: " + execution.getExecutionId() );
}

Я не уверен, что это переносимо для Maven 3.

Ответ 3

Фрагменты кода плагина Java:

import org.apache.maven.plugin.MojoExecution;
import org.apache.maven.plugins.annotations.Component;

...

@Component
private MojoExecution execution;
...
execution.getLifecyclePhase()

Используйте зависимости Maven (ваши версии могут отличаться):

<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-plugin-api</artifactId>
  <version>3.3.1</version>
</dependency>
<dependency>
  <groupId>org.apache.maven.plugin-tools</groupId>
  <artifactId>maven-plugin-annotations</artifactId>
  <version>3.4</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.apache.maven</groupId>
  <artifactId>maven-core</artifactId>
  <version>3.3.1</version>
</dependency>