without with the plugin create compiling compiler java maven-2 build-process executable-jar

java - with - maven-jar-plugin



Construyendo un jar ejecutable con Maven 2 (5)

Soy relativamente nuevo en el mantra Maven, pero estoy tratando de construir un archivo ejecutable de línea de comandos con Maven. Configuré mis dependencias, pero cuando ejecuto mvn install e intento ejecutar el jar, suceden dos cosas. Primero, no se encuentra ninguna clase principal, que se pueda corregir. Cuando lo corrigí, recibí errores de ejecución que indicaban que no se podían encontrar las clases.

Maven no empaqueta mis bibliotecas de dependencias dentro del contenedor, por lo que no puedo ejecutar el contenedor como una aplicación independiente. ¿Cómo puedo corregir esto?


Esto es lo que haría para proyectos pequeños. La mayoría de las veces no quieres un vaso grande.

construir: mvn clean dependency: paquete copy-dependencies

para ejecutar ( en el directorio de destino ): java -cp myjar.jar: ./ dependency / * com.something.MyClass


Estoy de acuerdo con Joachim Sauer,

En lugar de usar jar-with-dependency debe configurar el plugin jar de esa manera en su pom.xml:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <index>true</index> <manifest> <addClasspath>true</addClasspath> <mainClass>[mainClassFullName]</mainClass> </manifest> <manifestEntries> <mode>development</mode> <url>${project.url}</url> <key>value</key> </manifestEntries> </archive> </configuration> </plugin>

Y use esta configuración de ensamblaje para agregar las dependencias de jar a su ensamblado:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> <id>zip-with-jars</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>false</includeBaseDirectory> <dependencySets> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <unpack>false</unpack> <scope>runtime</scope> </dependencySet> </dependencySets> </dependencySets> </assembly>


La forma más fácil de hacerlo sería crear un ensamblado utilizando el maven-assembly-plugin y el descriptor jar-with-dependencies predefinido. También necesitarás generar un manifiesto con una entrada de clase principal para este jar de uber. El siguiente fragmento muestra cómo configurar el plugin de ensamblaje para hacerlo:

<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>fully.qualified.MainClass</mainClass> </manifest> </archive> </configuration> </plugin> </plugins> </build>

Luego, para generar el ensamblaje, solo ejecuta:

mvn assembly:assembly

Si desea generar el ensamblaje como parte de su compilación, simplemente vincule el assembly:single mojo a la fase del paquete:

<build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>fully.qualified.MainClass</mainClass> </manifest> </archive> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>

Y simplemente ejecuta:

mvn package


Maven no empaqueta sus dependencias dentro de su archivo jar, porque generalmente no lo hace con los programas Java.

En su lugar, entrega las dependencias junto con su archivo jar y las menciona en el encabezado Class-Path del Manifiesto .

Para seguir esta ruta, deberá habilitar la propiedad addClasspath (documentada here ) para maven-jar-plugin .

Si realmente desea incluir todas sus dependencias en su archivo jar, puede usar el complemento Maven Assembly para crear un jar-with-dependencies .


Simplemente agregue el código siguiente en pom.xml y Ejecutar como: maven: install. El jar se creará en la carpeta de destino de eclipse, que se puede usar como "java -jar Hello.jar". pero asegúrese de que el nombre de la clase principal se da com.abc.HelloWorld.java

<build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-shade-plugin</artifactid> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <finalname>HelloW</finalname> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestentries> <main-class>com.abc.HelloWorld.java</main-class> <build-number>1</build-number> </manifestentries> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>