Определение фазы выполнения Maven в плагине
У меня есть плагин, который преобразует скомпилированные классы. Это преобразование должно выполняться как для классов модулей, так и для классов тестирования модулей. Таким образом, я привязываю плагин к этапам процессов и фаз процессов-тестов. Проблема заключается в том, что мне нужно определить, в какой фазе находится плагин, поскольку я не могу (фактически не могу) преобразовать один и тот же набор классов дважды.
Таким образом, внутри плагина мне нужно будет знать, выполняю ли я процессы-классы, и в этом случае я трансформирую классы модулей. Или, если я выполняю процессы-тесты-классы, в которых я делаю, я не трансформирую классы модулей и не трансформирую только тестовые классы модуля.
Я мог бы, конечно, создать для этого два плагина, но такое решение глубоко оскорбляет мою чувствительность и, вероятно, противоречит закону в нескольких штатах.
Кажется, что что-то, что я мог бы достичь из моего модуля, должно быть в состоянии рассказать мне, что такое текущий этап. Я просто не могу, чтобы жизнь меня узнала, что это такое.
Спасибо...
Ответы
Ответ 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>