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?

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top