transitivas pom instalar estructura dependencias consola comandos agregar maven-2 maven-assembly-plugin client-library

maven 2 - pom - Maven-¿Incluir libs dependientes en el tarro sin desempaquetar dependencias?



maven repository (3)

De hecho, el ensamblaje utilizando jar-with-dependencies hace que maven descomprima todas las dependencias ya que ${assembly.dependencySets.dependency.unpack} se establece en true en el descriptor de ensamblaje correspondiente.

Una solución simple sería proporcionar un descriptor de ensamblaje similar al jar-with-dependencies.xml y modificar ${assembly.dependencySets.dependency.unpack} a false , como esto:

EDITAR: por una razón desconocida, el comportamiento cuando se usa <unpack>false</unpack> no es exactamente el mismo y parece necesario agregar <outputDirectory>/</outputDirectory> al conjunto de archivos o no se obtiene el resultado esperado .

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

Estamos tratando de construir un archivo de cliente que incluya archivos dependientes desempaquetados . Y el manifiesto debe tener entradas de class-path a los archivos jar dependientes. El fragmento de código a continuación funciona, pero los frascos están desempaquetados. ¿Cómo podemos evitar que se desempaqueten los frascos?

<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <addClasspath>true</addClasspath> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>


La solución propuesta por Pascal Thivent define un nuevo ensamblaje para el complemento de ensamblaje de Maven. El complemento de ensamblaje de Maven ofrece ensamblajes predeterminados que son ''bin'', ''jar-with-dependencies'', ''project'' y ''src'' produciendo varios paquetes predefinidos.

Se debe definir un nuevo ensamblaje en un nuevo archivo xml, la mayoría del tiempo ubicado en src / assemble. Luego se cargará en lugar del predefinido, de esta manera:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2-beta-5</version> <configuration> <!-- disabled predefined assembly --> <!-- <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> --> <descriptors> <descriptor>src/assemble/myAssembly.xml</descriptor> </descriptors> </configuration> </plugin>


Puedes agregar tus dependencias como archivos jar a tu jar:

ensamblador-descriptor.xml

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

pom.xml

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.6</version> <executions> <execution> <id>make-uberjar</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptor>src/main/assemble/assembly-descriptor.xml</descriptor> </configuration> </execution> </executions> </plugin>

Pero, desafortunadamente, no puede usar el encabezado Class-Path en manifest.mf , consulte Agregar clases a Classpath del archivo JAR :

Nota: El encabezado Class-Path apunta a clases o archivos JAR en la red local, no a archivos JAR dentro del archivo JAR o clases accesibles a través de protocolos de Internet. Para cargar clases en archivos JAR dentro de un archivo JAR en la ruta de clases, debe escribir código personalizado para cargar esas clases. Por ejemplo, si MyJar.jar contiene otro archivo JAR llamado MyUtils.jar , no puede usar el encabezado Class-Path en MyJar.jar''s manifiesto MyJar.jar''s para cargar clases en MyUtils.jar en la ruta de clases.