Pregunta

Tengo varios proyectos de Maven que crean varios componentes de un marco de plugin para una aplicación de terceros. Tengo un proyecto maestro que, usando la agregación (& Lt; modules & Gt; element), incluye todos los subproyectos. Este proyecto maestro también llama al complemento ensamblador maven. Ahora puedo compilar todos los subproyectos y hacer que el ensamblador copie sus salidas / archivos / fuentes / recursos, etc. en un directorio maestro de compilación, y luego comprima todos estos archivos en un único zip de distribución. Hago esto con el comando:

ensamblaje del paquete mvn: ensamblaje

Todo esto funciona muy bien. Ahora quiero pasar este archivo zip a otro complemento maven que lo abrirá y creará un archivo de manifiesto personalizado que enumera el contenido del archivo zip y luego inserta este archivo de manifiesto nuevamente en el archivo zip. He escrito el complemento para hacer esto y funciona bien.

Mi problema es que este complemento sea ejecutado por maven como parte del proceso de compilación.

El complemento necesita la salida del ensamblador, pero no parece haber una forma de ejecutar un complemento después del ensamblador.

¿Alguien puede ayudar?

¿Fue útil?

Solución

Suponiendo que el ensamblaje ya se ha definido para crear el ensamblaje en destino / ensamblados, simplemente necesita vincular la ejecución de los complementos a las fases de ciclo de vida estándar , para que pueda ejecutar mvn install (por ejemplo) y ejecutar los complementos durante ese ciclo de vida.

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

Luego, vincula la ejecución de su complemento a una fase posterior (por ejemplo, prueba de integración), para que pueda acceder a los archivos de ensamblaje:

  <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 este enfoque, cada complemento se ejecutará en la fase correspondiente (paquete) cuando ejecute mvn package (o una fase posterior como instalar, verificar, implementar ...).

Tenga en cuenta que su complemento debe definirse después de el complemento de ensamblaje para asegurarse de que se ejecute después (no importa el orden si están en fases diferentes, solo cuando está en la misma fase).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top