Определение фазы выполнения Maven в плагине - PullRequest
13 голосов
/ 19 сентября 2010

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

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

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

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

Спасибо ...

Ответы [ 3 ]

8 голосов
/ 20 сентября 2010

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

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

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

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

2 голосов
/ 20 сентября 2010

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

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

...

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

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

0 голосов
/ 05 сентября 2014

Фрагменты кода 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>
...