Utilisation de la sortie du plugin maven assembler comme entrée pour le plugin

StackOverflow https://stackoverflow.com/questions/1445235

  •  22-07-2019
  •  | 
  •  

Question

J'ai plusieurs projets maven qui construisent divers composants d'un framework de plug-in pour une application tierce. J'ai un projet principal qui, en utilisant l'agrégation (& Lt; modules & Gt; élément), inclut tous les sous-projets. Ce projet principal appelle également le plug-in maven assembler. Je peux maintenant construire tous les sous-projets et faire en sorte que l'assembleur copie leurs sorties / fichiers / sources / ressources, etc. dans un répertoire de construction principal, puis compresse tous ces fichiers dans un zip de distribution unique. Je le fais avec la commande:

Assemblage de package MVN: assemblage

Tout cela fonctionne très bien. Je souhaite maintenant transmettre ce fichier zip à un autre plug-in maven, qui l'ouvrira et créera un fichier manifeste personnalisé répertoriant le contenu du fichier zip, puis réinsérant ce fichier manifeste dans le fichier zip. J'ai écrit le plugin pour le faire et cela fonctionne bien.

Mon problème est de faire exécuter ce plugin par maven dans le cadre du processus de construction.

Le plugin a besoin de la sortie de l'assembleur, mais il ne semble pas qu'il y ait de toute façon l'exécution d'un plugin après l'assembleur.

Quelqu'un peut-il aider?

Était-ce utile?

La solution

En supposant que l'assembly ait déjà été défini pour créer l'assembly dans target / assemblies, il vous suffit de lier l'exécution des plug-ins aux phases du cycle de vie standard , afin que vous puissiez exécuter mvn install (par exemple) et faire exécuter les plugins au cours de ce cycle de vie.

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

Vous liez ensuite l'exécution de votre plugin à une phase ultérieure (par exemple integration-test), afin qu'il puisse accéder aux fichiers de l'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>

En utilisant cette approche, chaque plug-in sera exécuté dans la phase appropriée (package) lorsque vous exécuterez mvn package (ou une phase ultérieure, telle que l'installation, la vérification, le déploiement ...).

Notez que votre plug-in doit être défini après après le plug-in d'assemblage afin de s'assurer qu'il est exécuté ensuite (peu importe l'ordre dans lequel elles se déroulent, seulement dans la même phase).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top