que proyecto mvn introduccion estructura ejemplo crear conceptos clean basicos maven-2

maven-2 - proyecto - maven introduccion



Complemento de ensamblado de maven: cómo crear ensamblados anidados (2)

Tengo un proyecto en el que estoy tratando de crear un archivo zip de distribución, que contiene (entre otros archivos) un jar ejecutable con dependencias de mi proyecto Java.

Así que quiero que se vea así:

-wiki-search-1.0.0-dist.zip -wiki-search.bat -wiki-search-help.html -wiki-search-1.0.0-jar-with-dependencies.jar -jar content...

Estoy usando el complemento de ensamblaje y el descriptor predefinido "jar-with-dependencies" para crear mi archivo jar ejecutable.

Estoy especificando una entrada de complemento de ensamblaje en mi pom, haciendo referencia a un descriptor personalizado para intentar construir el archivo zip distribuible.

Así que la parte de mi pom se ve así:

<plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>quicksearch.QuickSearchApp</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>attached</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptors> <descriptor>src/main/assembly/dist.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>attached</goal> </goals> </execution> </executions> </plugin>

Y mi descriptor personalizado se ve así:

<assembly> <id>dist</id> <formats> <format>tar.gz</format> <format>tar.bz2</format> <format>zip</format> </formats> <fileSets> <fileSet> <includes> <include>${project.basedir}/target/wiki-search-0.0.1-SNAPSHOT-jar-with-dependencies.jar</include> </includes> <outputDirectory>.</outputDirectory> </fileSet> <fileSet> <directory>${project.basedir}/src/main/etc</directory> <includes> <include>*</include> </includes> <outputDirectory></outputDirectory> </fileSet> </fileSets> </assembly>

Todo funciona bien. Se está construyendo el tarro con dependencias. Mi archivo zip dist se está construyendo. Pero el archivo zip dist no contiene el archivo jar-with-dependencies.


Con su configuración existente, sus dos configuraciones separadas para el complemento de ensamblaje se fusionarán y las configuraciones también se fusionarán.

Para lograr su objetivo, debe definir una única configuración de complemento de ensamblaje con múltiples ejecuciones anidadas, luego definir la configuración para cada ejecución dentro de ella. El complemento de ensamblaje luego ejecutará cada ensamblaje secuencialmente, por lo que el jar-with-dependencies estará disponible para su inclusión en el jar de dist . También tenga en cuenta que el objetivo attached está en desuso a favor del objetivo single .

También tenga en cuenta que las rutas en el ensamblaje son relativas a la raíz, y para incluir un archivo en particular, debe usar el elemento <files> lugar del elemento <filesets> . También puede especificar propiedades en el ensamblaje para que sea menos frágil de cambiar.

La configuración y el montaje reorganizados a continuación deben hacer lo que está buscando:

Descriptor de montaje:

<assembly> <id>dist</id> <formats> <format>tar.gz</format> <format>tar.bz2</format> <format>zip</format> </formats> <files> <file> <source> target/${project.artifactId}-${project.version}-jar-with-dependencies.jar </source> <outputDirectory>/</outputDirectory> </file> </files> <fileSets> <fileSet> <directory>${project.basedir}/src/main/resources</directory> <includes> <include>*</include> </includes> <outputDirectory>/</outputDirectory> </fileSet> </fileSets> </assembly>

Plugin de montaje:

<plugin> <artifactId>maven-assembly-plugin</artifactId> <executions> <execution> <id>jar-with-dependencies</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>quicksearch.QuickSearchApp</mainClass> </manifest> </archive> </configuration> </execution> <execution> <id>dist</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptors> <descriptor>src/main/assembly/dist.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin>


Tiene dos configuraciones diferentes para el plug-in de ensamblaje, y desea que se ejecuten en orden (jar antes de zip), pero no creo que Maven implique ningún orden en la forma en que esto se resolverá. Mi conjetura es que el archivo zip se está generando antes que el archivo JAR.

Incluso si ese no es el caso, sugeriría que cree un módulo por artefacto. Mueva el ensamblaje JAR a su propio módulo y haga que el ahora solo módulo Zip dependa de él. De esa manera, la resolución de órdenes de dependencia de Maven puede activarse y construirse en orden.