确定插件中的Maven执行阶段

时间:2010-09-19 16:52:25

标签: maven-2 maven-plugin

我有一个插件可以转换编译的类。需要对模块的类和模块的测试类进行此转换。因此,我将插件绑定到进程类和进程测试类阶段。我遇到的问题是我需要确定插件当前正在执行哪个阶段,因为我没有(实际上不能)实际上两次转换同一组类。

因此,在插件中,我需要知道我是否正在执行进程类 - 在这种情况下我转换模块的类。或者,如果我正在执行process-test-classes - 在这种情况下我不会转换模块的类并只转换模块的测试类。

当然,我可以为此创建两个插件,但是这种解决方案深深地冒犯了我的感情,可能在几个州违反了法律。

似乎我可以从我的模块中获得的东西应该能够告诉我当前的阶段是什么。我不能为我的生活找到那些东西。

...谢谢

3 个答案:

答案 0 :(得分:8)

  

因此,在插件中,我需要知道我是在执行进程类(...)还是我正在执行进程测试类

AFAIK,这是not really possible

  当然,我可以为此创建两个插件,但是这种解决方案深深地冒犯了我的感情,可能在几个州违反了法律。

我没有看到有两个Mojos共享代码但绑定到不同阶段的任何问题。类似于Maven编译器插件(及其compiler:compilecompiler:testCompile目标)。

答案 1 :(得分:2)

你无法获得阶段,但你可以获得你所拥有的执行ID。在插件中:

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

...

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

我不确定这是否可以移植到Maven 3。

答案 2 :(得分:0)

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>