Utilizzo dell'output del plug-in di Maven Assembler come input per il plug-in
-
22-07-2019 - |
Domanda
Ho una serie di progetti maven che creano vari componenti di un framework di plugin per un'applicazione di terze parti. Ho un progetto principale che, usando l'aggregazione (& Lt; moduli & Gt; elemento), include tutti i progetti secondari. Questo progetto principale chiama anche il plugin assemblatore Maven. Ora posso costruire tutti i sottoprogetti e fare in modo che l'assemblatore copi i propri output / file / fonti / risorse ecc. In una directory di build principale, quindi comprimi tutti questi file in un unico zip di distribuzione. Lo faccio con il comando:
assembly pacchetto mvn: assembly
Tutto funziona alla grande. Ora voglio passare questo file zip in un altro plugin maven che lo aprirà e creerà un file manifest personalizzato che elenca il contenuto zip e quindi reinserisca questo file manifest nel file zip. Ho scritto il plugin per farlo e funziona benissimo.
Il mio problema è far funzionare questo plugin da maven come parte del processo di compilazione.
Il plug-in necessita dell'output dell'assemblatore, ma non sembra esserci alcun modo di eseguire un plug-in dopo l'assemblatore.
Qualcuno può aiutare?
Soluzione
Supponendo che l'assembly sia già stato definito per creare l'assembly in target / assembly, è sufficiente associare l'esecuzione dei plugin alle fasi di ciclo di vita standard , quindi puoi eseguire mvn install
(per esempio) e far eseguire i plugin durante quello ciclo di vita.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>generate-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<!--your configuration here -->
...
</configuration>
</execution>
</executions>
</plugin>
Quindi si vincola l'esecuzione del plug-in a una fase successiva (ad esempio test di integrazione), in modo che sia in grado di accedere ai file di assembly:
<plugin>
<groupId>your.plugin.groupId</groupId>
<artifactId>your-artifactId</artifactId>
<executions>
<execution>
<id>mung-manifests</id>
<phase>package</phase>
<goals>
<goal>your-goal-name</goal>
</goals>
<configuration>
<assemblyDirectory>${project.build.directory}/assemblies</assemblyDirectory>
</configuration>
</execution>
</executions>
</plugin>
Usando questo approccio, ogni plugin verrà eseguito nella fase pertinente (pacchetto) quando si esegue pacchetto mvn
(o fase successiva come installare, verificare, distribuire ...).
Tieni presente che il plug-in deve essere definito dopo il plug-in di assembly per garantire che venga eseguito in seguito (non importa se si trovano in fasi diverse, solo quando nella stessa fase).