2009-08-25 12 views
15

Uso el plugin de ensamblaje para crear varios frascos con algunas clases en él. Necesito nombres personalizados para los frascos resultantes: app_business.jarapp_gui.jarcore.jar etc.Maven-assembly-plugin: nombres de archivo jar personalizados

Actualmente tengo a siguiente configuración:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
    <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

un archivo de la assembly.xml :

<assembly> 
     <id>app_business</id> 
     <formats> 
     <format>jar</format> 
     </formats> 
     <baseDirectory>target</baseDirectory> 
     <includeBaseDirectory>false</includeBaseDirectory> 

     <fileSets> 
     <fileSet> 
      <directory>${project.build.outputDirectory}</directory> 
      <outputDirectory></outputDirectory> 
      <includes> 
      <include>org/xyz/**</include> 
      </includes> 
     </fileSet>  
     </fileSets> 
    </assembly> 

esto crea un archivo app_business.jar que es perfecto . Pero no tengo idea de cómo crear mis otros archivos. La opción appendAssemblyId no me ayuda, ya que crea nombres de archivo en el formato AppName-app_business.jar. Realmente necesito el nombre de archivo exacto app_business.jar.

¿Alguna idea? ¡Muchas gracias!

Respuesta

-1

Los plugins maven estándar están pensados ​​para trabajos generales y repetitivos. Reúnen toda la información del POM y son inteligentes (en el sentido de que no necesita configurar mucho).

Si necesita tareas especiales, le sugiero que utilice ant plugin que le permite insertar una pieza de código Ant en el POM. Esto le permite ejecutar el jar task.

+0

No me gusta mezclar tareas de hormigas y maven. De todos modos, el uso de las tareas ant necesita mucha menos configuración xml. (alrededor de 20 líneas para mi trabajo) – Synox

+3

@Synox, no debe evitar el plugin antrun, es muy útil para llenar los vacíos en Maven sin tener que rodar su propio complemento. Simplemente tiendo a encontrar que las personas son un toque demasiado aficionado a usarlo cuando hay más Mavenic (lo que sea, el equivalente de Maven de Pythonic) maneras de hacerlo. En este caso, creo que el plugin de ensamblaje * debería * ajustarse mejor, pero como puede ver en mi respuesta, parece haber todavía algunos problemas que impiden que funcione exactamente como lo desea el OP. –

+0

Es fácil de rodar maven plugin usando hormiga. –

38

Puede mover el elemento de configuración debajo del elemento de ejecución de la declaración del complemento. Esto significa que la configuración solo se aplicará a esa ejecución. A continuación, puede agregar ejecuciones adicionales del plugin de ensamblaje para sus otros ensamblajes.

Aquí es un ejemplo de la configuración modificada con dos ejecuciones, cada referenciado de un conjunto diferente:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
    <execution> 
     <id>make-business-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_business</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/business-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    <execution> 
     <id>make-gui-assembly</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <finalName>app_gui</finalName> 
     <descriptors> 
      <descriptor>src/main/assembly/gui-assembly.xml</descriptor> 
     </descriptors> 
     <attach>true</attach> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Con esta configuración, dos frascos adicionales (_business.jar aplicación y _gui.jar APP) serán creados en el directorio de destino, tenga en cuenta que si instala el proyecto, solo se instalará el último artefacto ensamblado (esto podría ser un problema).

Para evitar esto, necesitaría cambiar las propiedades appendAssemblyId a true. Lo más cercano que puede obtener en este caso es cambiar los Nominales a "aplicación" y los ID a "gui" y "negocios", lo que da como resultado que se empaqueten app-gui.jar y app-business.jar y se instalen todos los artefactos.

+0

¡Gracias por la respuesta realmente rápida! funciona.como dijiste, hay advertencias en la consola y el último artefacto se convierte en el artefacto principal. Puedo vivir con eso, pero no me gustan las advertencias en la consola. ¿Hay alguna forma de ocultarlos (o configurarlo para hacerlo)? – Synox

+0

¿Cuáles son las advertencias? La última sección de mi respuesta aborda la cuestión principal artefacto, si usted puede estar parado para cambiar de guiones de guiones –

+1

Las advertencias son: [ADVERTENCIA] opciones de configuración: 'appendAssemblyId' se establece en false, y 'clasificador' no se encuentra . En lugar de adjuntar el archivo de ensamblaje: ... \ app_business.jar, se convertirá en el archivo del artefacto principal del proyecto. NOTA: Si se proporcionan descriptores múltiples o formatos de descriptor para este proyecto, ¡el valor de este archivo no será determinante! [ADVERTENCIA] Sustitución del archivo de artefacto principal del proyecto preexistente: ... \ app_gui.jar con archivo de ensamblaje: .... \ app_gui.jar Me gustaría evitar tener que cambiar de subrayado a hipers. Pero si no puedo evitar ... esta solución es bastante buena. – Synox

Cuestiones relacionadas