Maven 2 确定插件内的Maven执行阶段

Maven 2 确定插件内的Maven执行阶段,maven-2,maven-plugin,Maven 2,Maven Plugin,我有一个插件,可以转换编译后的类。这个转换需要同时对模块的类和模块的测试类进行。因此,我将插件绑定到流程类和流程测试类阶段。我的问题是,我需要确定插件当前在哪个阶段执行,因为我不会(实际上不能)两次转换同一组类 因此,在插件中,我需要知道我是否在执行流程类——在这种情况下,我转换模块的类。或者,如果我正在执行流程测试类——在这种情况下,我不转换模块的类,而只转换模块的测试类 当然,我可以为此创建两个插件,但这种解决方案深深地触犯了我的感情,可能在几个州违反了法律 这似乎是我可以从我的模块中获得的

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

因此,在插件中,我需要知道我是否在执行流程类——在这种情况下,我转换模块的类。或者,如果我正在执行流程测试类——在这种情况下,我不转换模块的类,而只转换模块的测试类

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

这似乎是我可以从我的模块中获得的东西,应该能够告诉我当前阶段是什么。我这辈子都搞不清楚那是什么东西

谢谢

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

好了,这是我的

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


我不认为两个mojo共享代码但绑定到不同阶段有什么错。类似于Maven编译器插件(及其
编译器:compile
编译器:testCompile
目标)。

您无法获得阶段,但可以获得单独的执行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。

Java插件代码片段:

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

...

@Component
private MojoExecution execution;
...
execution.getLifecyclePhase()
使用Maven依赖项(您的版本可能会有所不同):


org.apache.maven
maven插件api
3.3.1
org.apache.maven.plugin-tools
maven插件注释
3.4
假如
org.apache.maven
马文堆芯
3.3.1

@Pascal Thivent for the Zombie Process and Zombie computers:)@Colin是的,我明白了,但我不认为这与问题有任何关系。我想加上标签“僵尸吃掉了我的大脑,但我没有任何代表,所以我选择了Zombie Swell,J博士的答案非常明确。我必须说,这似乎很奇怪,但什么电动汽车。。。谢谢你的快速回答。我还发现AspectJ编译器Maven插件与我需要做的事情是一样的,所以我要看看他们是如何处理这个问题的。所以,AspectJ编译器使用的模式适合我。为了子孙后代,我只需在插件中创建两个mojo,一个用于流程类,另一个用于流程测试类。这个解决方案不需要另一个插件(这是我最担心的)。难道你不能从MavenExecutionRequest中获得吗?当然,我会问如何获得这个对象。是的,在我实现的几乎所有Maven插件中都有一个AbstractXyzMojo、一个CompileXyzMojo和一个TestCompileXyzMojo。我想这是Maven插件开发的标准(+1)谢谢。我刚刚使用了AspectJ使用的模式,它工作得非常好。当Maven希望使用特定模式时,不想违背规则。这只在执行时部分起作用。当直接调用mojo(而不是作为生命周期的一部分)时,GetLifecyclePase()将返回
null
,例如
mvn插件名称:mojo name
<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>