without with the proyecto plugin generate generar create compiling all java maven dependencies maven-3 m2eclipse

java - with - Cómo: Eclipse Maven instalar build jar con dependencias



maven-jar-plugin (1)

Estoy usando Eclipse Maven (m2e) dentro de Eclipse y estoy ejecutando mi proyecto así:

Mi pom.xml ve así:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>ro.project</groupId> <packaging>jar</packaging> <version>1.0-SNAPSHOT</version> <name>ro.project</name> <properties> <org.springframework.version>3.1.1.RELEASE</org.springframework.version> <org.hibernate.version>4.1.0.Final</org.hibernate.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${org.springframework.version}</version> </dependency> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>ro.project.ProjectServer</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <artifactId>maven-antrun-plugin</artifactId> <dependencies> <dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.7.0_02</version> <scope>system</scope> <systemPath>${java.home}/../lib/tools.jar</systemPath> </dependency> </dependencies> <executions> <execution> <id>ant-magic</id> <phase>prepare-package</phase> <goals> <goal>run</goal> </goals> <configuration> <tasks> <property name="compile_classpath" refid="maven.compile.classpath" /> <property name="runtime_classpath" refid="maven.runtime.classpath" /> <property name="test_classpath" refid="maven.test.classpath" /> <property name="plugin_classpath" refid="maven.plugin.classpath" /> <ant antfile="${basedir}/clientExport.xml" target="export-all" /> </tasks> </configuration> </execution> </executions> </plugin> </plugins> </build> <artifactId>project-core</artifactId> <url>http://www.project.ro</url> </project>

Después de ejecutar la instalación de Maven está funcionando ...

Configuraciones de ejecución de Maven:

El problema es que mi .jar generado no tiene las dependencias incluidas ... ¿Cómo puedo configurar pom.xml para incluir todas mis dependencias en formato .jar y no desempaquetar ... porque parece que no está funcionando correctamente? ...

Para estar seguro de que es correcto incluir todos los archivos jar .. Descargué y agregué cada biblioteca a la carpeta /lib jar ''s /lib archivo jar se está ejecutando ... así que ... mi única pregunta es: ¿Cómo puedo configurar pom.xml para ¿Añadir todas mis dependencias en formato jar ?

Probé todos los métodos:

  1. assembly:assembly
  2. assembly:single
  3. assembly:single con mi descriptor (un archivo assemble.xml ) pero no funcionó
  4. maven copy dependencies complemento de maven copy dependencies pero aún no funciona con Eclipse Maven - m2e

Me he quedado sin soluciones ... ¿alguien puede decirme una forma adecuada de agregar mis dependencias en el tarro? No puedo creer que el maven sea ​​tan complejo y no puedo encontrar una respuesta a mi pregunta en todas partes ..

Gracias de antemano


Hay un par de maneras de hacer esto.

1) Si desea un uber-jar (reenvasado con todas las dependencias), considere usar y configurar el maven-shade-plugin :

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>1.6</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.group.id.Launcher1</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>

Esto desempaquetará todas las dependencias y las combinará en un archivo JAR.


2) Si desea entregar un paquete (zip, tar.gz, etc.) con los archivos JAR desempaquetados en el paquete (tal vez bajo lib /), entonces debe buscar en el maven-assembly-plugin :

<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.3</version> <executions> <execution> <id>create-distro</id> <phase>package</phase> <goals> <goal>single</goal> </goals> <configuration> <descriptors> <descriptor>src/main/assembly/dist.xml</descriptor> </descriptors> </configuration> </execution> </executions> </plugin> </plugins> </build>

Tenga en cuenta que esto requiere un descriptor de ensamblado src/main/assembly/dist.xml y el ejemplo tiene este aspecto:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"> <id>distribution</id> <formats> <format>zip</format> </formats> <dependencySets> <dependencySet> <useProjectArtifact>false</useProjectArtifact> <useTransitiveDependencies>false</useTransitiveDependencies> <unpack>false</unpack> <scope>runtime</scope> <fileMode>0755</fileMode> <directoryMode>0755</directoryMode> <outputDirectory>bin</outputDirectory> <includes> <include>com.group.id:project-launch1</include> <include>com.group.id:project-launch2</include> </includes> </dependencySet> <dependencySet> <useProjectArtifact>false</useProjectArtifact> <useTransitiveDependencies>true</useTransitiveDependencies> <unpack>false</unpack> <scope>runtime</scope> <fileMode>0644</fileMode> <directoryMode>0755</directoryMode> <outputDirectory>lib</outputDirectory> <includes> <include>com.group.id:project-lib1</include> <include>com.group.id:project-lib2</include> <include>com.group.id:project-lib3</include> <include>com.group.id:project-lib4</include> </includes> </dependencySet> </dependencySets> </assembly>

Y como ahora está ensamblando dependencias, debe definir mejor la dependencia en el archivo pom.xml, así:

<dependencies> <dependency> <groupId>com.group.id</groupId> <artifactId>project-launch1</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> </dependency> <dependency> <groupId>com.group.id</groupId> <artifactId>project-launch2</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> </dependency> <dependency> <groupId>com.group.id</groupId> <artifactId>project-lib1</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> </dependency> ... and so on ... </dependencies>


3) Si está entregando un paquete con un lanzador de archivos JAR ejecutable, es probable que tenga que agregar una configuración de maven-jar-plugin in de maven además del maven-jar-plugin in de ensamblaje de maven :

<dependencies> <dependency> <groupId>com.group.id</groupId> <artifactId>project-lib1</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> </dependency> <dependency> <groupId>com.group.id</groupId> <artifactId>project-lib2</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> </dependency> <dependency> <groupId>com.group.id</groupId> <artifactId>project-lib3</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> </dependency> ... and so on ... </dependencies> <build> <plugins> <plugin> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <addMavenDescriptor>false</addMavenDescriptor> <compress>true</compress> <manifest> <mainClass>com.group.id.Launcher1</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>../lib/</classpathPrefix> </manifest> </archive> </configuration> </plugin> </plugins> </build>

Tenga en cuenta que la directiva "addClasspath" agrega las dependencias del proyecto a la ruta de clase. Esto es necesario para los lanzadores JAR, ya que ignoran explícitamente todas las variables de entorno CLASSPATH.