2009-08-26 17 views
95

Actualmente estoy usando el ensamblado jar-with-dependencies para crear dicho contenedor. Sin embargo, el nombre de mi jar es un poco largo.¿Es posible renombrar un maven jar-with-dependence?

Dado que este paquete está siendo utilizado por los programas RPG en un AS400, me gustaría acortarlo para hacer la vida un poco más fácil para los desarrolladores. Pero, aparte de hacerlo a mano, no he encontrado una manera de cambiar el nombre del archivo desde el project-name-version-classifier-jar-with-dependencies.jar habitual. Me gustaría algo como project-name-version-classifier-full.jar

¿Hay alguna forma de hacerlo sin básicamente copiar el descriptor de ensamblado jar-with-depencies y llamarlo por completo?

Además, quiero continuar teniendo el jar sin el classpath ensamblado almacenado en el repositorio.

Necesito dos artefactos. El jar con mi clasificador que contiene la región para la cual está la construcción. El jar con todas las dependencias que también incluye la región.

project-name-version-region-full.jar y project-name-version-region.jar deben almacenarse en el repositorio. En el primer ejemplo, el clasificador está lleno de región, en el 2 es su región. El último está funcionando.

Respuesta

168

puede especificar el finalName propiedad para dar el tarro el nombre que desea, y especificar que appendAssemblyId debe ser falsa para evitar el sufijo "jar-con-dependencias".

La configuración de salida por debajo de la voluntad un frasco llamado "test.jar"

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-4</version> 
    <executions> 
    <execution> 
     <id>jar-with-dependencies</id> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <finalName>test</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Actualización: basado en sus comentarios, utilizando el incorporado en el descriptor no va a funcionar. Creo que esto se debe a un error en las versiones recientes del plugin de ensamblaje: han eliminado la compatibilidad con los clasificadores, pero el ID es fijo si utilizas un descriptor incorporado, por lo que terminas con un gran nombre falso.

Como solución alternativa, puede copiar el descriptor de ensamblaje utilizado por el descriptor jar-with-dependencies y modificar la identificación.

Este ejemplo podría dar lugar a la identificación de montaje que se adjunta a la finalName, así que si usted necesita tener un nombre de región full.jar, se puede especificar el finalName como región y el identificador de conjunto como se completo. Esto dará como resultado un archivo en el destino llamado region-full.jar, pero tenga en cuenta que todavía se instalará en el repositorio Maven como un artefacto adjunto con completo utilizado como clasificador. Siempre que esta identificación sea diferente a la de su otro ensamblaje, no debería haber colisión.

La configuración pom se vería así.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-4</version> 
    <executions> 
    <execution> 
     <id>jar-with-dependencies</id> 
     <phase>prepare-package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <descriptors> 
      <descriptor>src/main/assembly/jar-assembly.xml</descriptor> 
     </descriptors> 
     <finalName>region</finalName> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

y el frasco-assembly.xml en src/main/montaje de la siguiente manera:

<assembly> 
    <id>full</id> 
    <formats> 
    <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
    <dependencySet> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
    </dependencySet> 
    </dependencySets> 
    <fileSets> 
    <fileSet> 
     <directory>${project.build.outputDirectory}</directory> 
    </fileSet> 
    </fileSets> 
</assembly> 
+1

Ah, appendAssemblyId, ¿cómo te extraño. ¡Gracias! –

+0

Trabajando en esa elaboración Rich. Esencialmente, necesito dos artefactos clasificadores para ser almacenados. Con appendAssemblyId activado, tuve 3 artifiacts, uno sin clasificador, la versión clasificador y la versión jar-with-dependencies. con appendAssemblyID desactivado, el jar de uber se instala en la versión no clasificada. Necesito que estos chicos usen un clasificador regional + de base completa que diga para dónde fueron creados. Lamentablemente, agregar la etiqueta del clasificador no funciona. –

+0

Simplemente estableciendo * appendAssemblyId * a * falso * hizo el trabajo. Le permite mantener el nombre final regular sin volver a escribirlo. –

2

voy a dar el crédito rico para mí apuntando en la dirección correcta, pero quería publique la solución que funcionó para mí ya que Rich's estaba un poco apagado:

Mi jar-assembly.xml parecía esto lo que permitió la identificación de montaje para cambiar de la región que se almacena como una propiedad de perfil:

<assembly> 
    <id>${env}-full</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
     <unpack>true</unpack> 
     <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 
    <fileSets> 
     <fileSet> 
     <directory>${project.build.outputDirectory}</directory> 
     </fileSet> 
    </fileSets> 
</assembly> 

yo no utilizar el parámetro finalName en la configuración del experto-montaje-Plugin como esta construido mi proyecto con mi nombre de project-name-version-env-full.jar donde env-full era el clasificador.

Imagine mi sorpresa cuando supe que el ensamblado xml podría ser parametrizado por elementos en la compilación. Esto era exactamente lo que estaba buscando.

8

Gracias a los mensajes aquí y algunos de excavación en el maven docs he encontrado la siguiente configuración para un ensamblaje de jar ejecutable empaquetado único con un nombre personalizado.

En pom.xml:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
      <id>exe</id> 
      <phase>package</phase> 
      <goals><goal>single</goal></goals> 
      <configuration> 
       <finalName>MyJarName</finalName> 
       <attach>false</attach> 
       <appendAssemblyId>false</appendAssemblyId> 
       <descriptors> 
        <descriptor>assembly.xml</descriptor> 
       </descriptors> 
       <archive> 
        <manifest> 
         <mainClass>karlthepagain.MyMain</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

En assembly.xml:

<assembly> 
    <id>exe</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <includeBaseDirectory>false</includeBaseDirectory> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <unpack>true</unpack> 
      <scope>runtime</scope> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

Esto producirá MyJarName.jar con todas sus dependencias vuelva a embalar en el mismo frasco y la Main-Class: karlthepagain.MyMain especificado.

+1

Esto solucionó todos mis problemas principalmente cambiando el nombre del jar final por dependencias. –

13

Creo que he encontrado una forma de configurar esto directamente en el pom sin necesidad de un jar-assembly.xml por separado.

Es básicamente lo mismo que la respuesta de Rich, excepto que se especifica el nombre final con el artifactId y la versión.

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <finalName>${project.artifactId}-${project.version}-full</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <archive> 
      <manifest> 
       <mainClass>com.mycompany.MyMainClass</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-my-jar-with-dependenciess</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
+0

Has recorrido un largo camino desde tu primera respuesta, y esa respuesta todavía me ayudó hoy, ¡así que gracias! ; D – vakio

+1

Estaba buscando una solución como la suya, sin un archivo separado jar-assembly.xml. Gracias ... Funciona perfectamente para mí ... –

+0

¡Genial! De nada :) – vikingsteve

2

Esto funcionó para mí

<build> 
    <finalName>anynameyoulike</finalName> 
    <plugins>   
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.6</version> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs>     
       <appendAssemblyId>false</appendAssemblyId> 
       <archive> 
        <manifest> 
         <mainClass>com.mycompany.MyMainClass</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
      <executions> 
       <execution> 
        <id>make-assembly</id> <!-- this is used for inheritance merges --> 
        <phase>package</phase> <!-- bind to the packaging phase --> 
        <goals> 
         <goal>single</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 
Cuestiones relacionadas