java - plugin - ¿Es posible renombrar un maven jar-with-dependence?
maven-jar-plugin (5)
Actualmente estoy usando el ensamblado jar-with-dependencies para crear dicho contenedor. Sin embargo, el nombre de mi jar es un poco largo.
Como este juego de palabras está siendo utilizado por los programas de rol en un AS400, me gustaría acortarlo para hacer la vida un poco más fácil para esos desarrolladores. Pero, aparte de hacerlo a mano, no he encontrado una forma de cambiar el nombre del archivo jar del usual project-name-version-classifier-jar-with-dependencies.jar
. 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 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.
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>
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>
Gracias a las publicaciones aquí y a algunas búsquedas en los documentos maven, se me ocurrió la siguiente configuración para un ensamblaje de jar ejecutable reensamblado general ú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 reenvasados en el mismo jar y la Main-Class: karlthepagain.MyMain
especificada Main-Class: karlthepagain.MyMain
.
Puede especificar la propiedad finalName para darle al jar el nombre que desea, y especificar que appendAssemblyId debe ser falso para evitar el sufijo "jar-with-dependencies".
La siguiente configuración generará un jar 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, el uso del descriptor incorporado no 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 el id.
Este ejemplo daría como resultado que el Id de ensamblado se anexe al Nombre final, por lo que si necesita tener un nombre de region-full.jar , puede especificar el Nombre final como región y el Id. De ensamblaje como lleno . Esto dará como resultado un archivo en el destino llamado region-full.jar, pero tenga en cuenta que aún se instalará en el repositorio de Maven como un artefacto adjunto con el uso completo 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 jar-assembly.xml en src / main / assembly de esta 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>
Voy a darle crédito a Rich por apuntarme en la dirección correcta, pero quería publicar la solución que funcionó para mí, ya que Rich''s estaba un poco apagado:
Mi jar-assembly.xml se parecía a esto, lo que permitía que el id. De ensamblaje cambiara para la región que se almacenó como una propiedad en mi 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>
No utilicé el parámetro finalName en la configuración de maven-assembly-plugin ya que esto construyó mi proyecto con mi nombre de proyecto-nombre-versión-env-lleno.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.