79 votos

Construyendo un jar ejecutable con Maven 2

Soy relativamente nuevo en el Maven mantra, pero estoy tratando de construir una línea de comando jar ejecutable con Maven. He configuración de mi dependencias, pero cuando ejecuto mvn install y se intenta ejecutar el jar, suceden dos cosas. En primer lugar, no de la clase principal, que es corregible. Cuando he corregido esto, obtengo errores en ejecutar, indicando que las clases no se encuentra.

Maven no es el embalaje de mi dependencia de las bibliotecas en el interior de la jarra, de modo que soy incapaz de ejecutar el jar como una aplicación independiente. ¿Cómo puedo corregir esto?

109voto

Pascal Thivent Puntos 295221

La forma más sencilla de hacerlo sería crear un ensamblado utilizando la maven-assembly-plugin y el predefinidos jar-with-dependencies descriptor. También tendrás la necesidad de generar un manifiesto con un principal a la entrada de clase para este súper jarra. El fragmento de código siguiente se muestra cómo configurar la asamblea plugin 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>

Entonces, para generar la asamblea, solo hay que ejecutar:

mvn assembly:assembly

Si desea generar la asamblea como parte de su construcción, basta con enlazar la assembly:single mojo para el paquete de fase:

<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 basta con ejecutar:

mvn package

25voto

Joachim Sauer Puntos 133411

Maven no es el embalaje de sus dependencias en el interior de su archivo jar, porque no suelen hacer esto con los programas de Java.

En lugar de entregar las dependencias, junto con su archivo jar y mención de ellos en la Class-Path de encabezado del Manifiesto.

Para ir a esta ruta, tendrás que habilitar la addClasspath de la propiedad (documentado aquí) para la maven-jar-plugin.

Si usted realmente desea incluir todas sus dependencias en el archivo jar, entonces usted puede utilizar Maven Assembly plugin para crear un jar-with-dependencies.

8voto

user2409824 Puntos 21

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

para construir: dependencia: copia limpia mvn-paquete de dependencias

para ejecutar (en blanco dir): java -cp myjar.jar:./dependency/* com.something.MyClass

6voto

Estoy de acuerdo con Joachim Sauer,

En lugar de usar tarro con dependencia debe configurar el plugin tarro así en el 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 utilizar esta configuración de montaje para agregar las dependencias jar Asamblea:

<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>

2voto

Pankaj Puntos 3

Sólo tiene que añadir el siguiente código en el pom.xml y ejecutar como: maven: Instale. La jarra se creará en la carpeta de destino del eclipse que puede ser utilizado 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>

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X