Incluyendo dependencias en un frasco con Maven
¿Hay alguna manera de forzar a Maven (2.0.9) a incluir todas las dependencias en un solo archivo jar?
Tengo un proyecto que se construye en un solo archivo jar. Quiero que las clases de las dependencias también se copien en el jar.
Actualización: sé que no puedo simplemente incluir un archivo jar en un archivo jar. Estoy buscando una manera de descomprimir los archivos jar especificados como dependencias y empaquetar los archivos de clase en mi archivo jar.
Puede hacer esto usando el complemento maven-assembly con el descriptor "jar-with-dependencies". Aquí está el fragmento relevante de uno de nuestros pom.xml que hace esto:
<build>
<plugins>
<!-- any other plugins -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
Con Maven 2, la forma correcta de hacer esto es usar el complemento de ensamblaje Maven2 , que tiene un archivo descriptor predefinido para este propósito y que puede usar en la línea de comando:
mvn assembly:assembly -DdescriptorId=jar-with-dependencies
Si desea que este jar sea ejecutable, simplemente agregue la clase principal que se ejecutará a la configuración del complemento:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>my.package.to.my.MainClass</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Si desea crear ese ensamblado como parte del proceso de compilación normal, debe vincular el objetivo único o de directorio únicoassembly
(el objetivo SOLO debe ejecutarse desde la línea de comando) a una fase del ciclo de vida ( package
tiene sentido), algo como esto:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>create-my-bundle</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
...
</configuration>
</execution>
</executions>
</plugin>
Adapte el configuration
elemento a sus necesidades (por ejemplo, con el contenido del manifiesto tal como se habla).
Si desea crear un archivo jar ejecutable, también debe configurar la clase principal. Así debería ser la configuración completa.
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- ... -->
<archive>
<manifest>
<mainClass>fully.qualified.MainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>