2010-09-19 8 views
12

Ho un plugin che trasforma le classi compilate. Questa trasformazione deve essere eseguita sia per le classi del modulo che per le classi di test del modulo. Pertanto, lego il plug-in sia alle fasi del processo che alle fasi del test del processo. Il problema che ho è che ho bisogno di determinare in quale fase il plugin è attualmente in esecuzione, in quanto io non (non posso, in realtà) trasformare lo stesso insieme di classi due volte.Determinazione della fase di esecuzione di Maven all'interno di un plugin

Quindi, all'interno del plugin, avrei bisogno di sapere se sto eseguendo le classi di processo - nel qual caso trasformo le classi del modulo. O se eseguo classi di test del processo - nel cui caso non trasformo le classi del modulo e trasformo solo le classi di test del modulo.

Potrei, ovviamente, creare due plugin per questo, ma questo tipo di soluzione offende profondamente la mia sensibilità ed è probabilmente contro la legge in diversi stati.

Sembra che qualcosa che potrei raggiungere dal mio modulo dovrebbe essere in grado di dirmi qual è la fase corrente. Non posso proprio per la vita di me scoprire cosa sia quel qualcosa.

Grazie ...

+0

Qual è la [zombie] '' tag? –

+0

@Pascal Thivent per i computer di zombi e processi zombi :) –

+0

@Colin Sì, ho capito ma non vedo alcuna relazione con la domanda. –

risposta

7

Così, all'interno del plugin, avrei bisogno di sapere se sto eseguendo processo-classi (...) o se sto eseguendo processo-test-classi

AFAIK, questo è not really possible.

Potrei, ovviamente, creare due plugin per questo, ma questo tipo di soluzione offende profondamente la mia sensibilità ed è probabilmente contro la legge in diversi stati.

Non vedo nulla di sbagliato nell'avere due codici di condivisione Mojos ma legati a fasi diverse. Qualcosa come il plug-in Maven Compiler (e gli obiettivi compiler:compile e compiler:testCompile).

+0

Bene, quella risposta del Dr. J è piuttosto definitiva. Devo dire che sembra dannatamente strano, ma che ev ... Grazie per la pronta risposta. – Hellblazer

+0

Ho anche scoperto che il plugin Maven del compilatore AspectJ fa la stessa cosa di quello che devo fare e quindi vedrò come hanno affrontato questo problema. – Hellblazer

+0

Quindi, il pattern usato dal compilatore AspectJ funziona per me. Per i posteri, ho semplicemente creato due Mojos nel mio plugin, uno per le classi di processo e uno per le classi di test del processo. Questa soluzione non richiede un altro plug-in (che era la mia paura principale). – Hellblazer

2

non è possibile ottenere la fase, ma è possibile ottenere l'ID di esecuzione che si ha come separato. Nel plug-in:

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

... 

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

Non sono sicuro se questo è ancora portatile per Maven 3.

+0

Grazie. Ho appena usato il modello che AspectJ utilizza e funziona perfettamente bene. Non voglio andare controcorrente quando Maven vuole che un particolare schema sia usato. – Hellblazer

+0

sì, questo è sicuramente un modo migliore per gestirlo –

0

Java frammenti di codice plugin:

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

... 

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

dipendenze Usa Maven (i tuoi versioni possono variare):

<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> 
Problemi correlati