2010-09-19 12 views
12

Tengo un complemento que transforma las clases compiladas. Esta transformación debe realizarse tanto para las clases del módulo como para las clases de prueba del módulo. Por lo tanto, vinculo el complemento a las fases process-classes y process-test-classes. El problema que tengo es que necesito determinar en qué fase se está ejecutando actualmente el complemento, ya que no puedo (en realidad no puedo) transformar el mismo conjunto de clases dos veces.Determinación de la fase de ejecución de Maven dentro de un complemento

Por lo tanto, dentro del complemento, necesitaría saber si estoy ejecutando clases de proceso, en cuyo caso transformo las clases del módulo. O si estoy ejecutando process-test-classes, en cuyo caso no transformo las clases del módulo y solo transformo las clases de prueba del módulo.

Podría, por supuesto, crear dos complementos para esto, pero este tipo de solución ofende profundamente mi sensibilidad y probablemente sea contraria a la ley en varios estados.

Parece que algo que podría alcanzar desde mi módulo debería ser capaz de decirme cuál es la fase actual. No puedo por mi vida descubrir qué es ese algo.

Gracias ...

+0

¿Cuál es la etiqueta '[zombies]'? –

+0

@Pascal Thivent para los zombies y las computadoras zombies :) –

+0

@Colin Sí, lo tengo, pero no veo ninguna relación con la pregunta. –

Respuesta

7

Por lo tanto, dentro del plug-in, necesitaría saber si estoy de Procesos de Ejecución-clases (...) o si estoy ejecutando el proceso de los ensayos clases

AFAIK, esto es not really possible.

Pude, por supuesto, crear dos complementos para esto, pero este tipo de solución ofende profundamente mi sensibilidad y probablemente sea contraria a la ley en varios estados.

No veo nada de malo en tener dos Mojos compartiendo el código pero vinculado a diferentes fases. Algo así como el complemento Maven Compiler (y sus compiler:compile y compiler:testCompile objetivos).

+0

Bueno, esa respuesta del Dr. J es bastante definitiva. Debo decir que parece bastante raro, pero qué evs ... Gracias por la respuesta rápida. – Hellblazer

+0

También descubrí que el complemento MaJ de compilador AspectJ hace lo mismo que lo que tengo que hacer, así que voy a ver cómo lidiaron con esto. – Hellblazer

+0

Entonces, el patrón que utilizó el compilador AspectJ me funciona. Para la posteridad, simplemente creo dos Mojos en mi complemento, uno para las clases de proceso y otro para las clases de prueba de proceso. Esta solución no requiere otro complemento (que era mi principal temor). – Hellblazer

2

no puede obtener la fase, pero puede obtener la ID de ejecución que tiene por separado. En el complemento:

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

... 

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

No estoy seguro si esto es portátil para Maven 3 todavía.

+0

Gracias. Acabo de utilizar el patrón que utiliza AspectJ y funciona perfectamente bien. No quiero ir contra la corriente cuando Maven quiere que se use un patrón en particular. – Hellblazer

+0

sí, definitivamente es una mejor manera de manejarlo –

0

código Java Plugin de fragmentos:

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

... 

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

dependencias uso de Maven (sus versiones pueden variar):

<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> 
Cuestiones relacionadas