maven 2 - que - Excluyendo las dependencias “provistas” de la asamblea de Maven
maven-war-plugin (4)
Estoy tratando de usar el complemento de ensamblaje de Maven para crear un jar-with-dependencies, excepto aquellos que han proporcionado alcance.
He copiado el jar-with-dependencies en un archivo assembly.xml y configuré su uso en mi pom. Aquí está para la referencia:
<?xml version="1.0" encoding="UTF-8"?>
<assembly>
<id>injectable-jar</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
</fileSet>
</fileSets>
</assembly>
Me he enterado, que si configuro el alcance a provided
, entonces puedo construir un frasco que contenga exactamente lo que no quiero, pero no puedo averiguar cómo obtener un comportamiento inverso de eso.
Con el último Maven (estaba probando en Maven 3.0), esto parece funcionar como se esperaba, con algunas advertencias:
El alcance solicitado (en el conjunto de dependencias) puede incluir ámbitos adicionales basados en la siguiente definición: http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
Por lo tanto, si solicita el alcance de compilación obtendrá tanto compilación como provisión. Sin embargo, si solicita el alcance del tiempo de ejecución, debe obtener la compilación y el tiempo de ejecución (pero no se proporciona).
En teoría, las etiquetas "ignoreNonCompile" y "excludeScope" deberían ayudar, pero tenga en cuenta que no necesariamente funcionan correctamente.
Con maven3 y el complemento 2.4 de dependencia de maven, una solución es:
<configuration>
<excludeArtifactIds>junit,mockito-all</excludeArtifactIds>
<excludeTransitive>true</excludeTransitive>
</configuration>
Esta es una publicación antigua, pero el complemento de dependencia de maven ahora tiene una opción "excludeScope" que puede establecer en "proporcionado" o cualquier ámbito que necesite.
Por ejemplo,
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<excludeScope>provided</excludeScope>
</configuration>
</execution>
</executions>
</plugin>
Esto es un poco torpe, pero puede usar el complemento de dependencia de maven para copiar / descomprimir todas las dependencias en su proyecto, luego usar el complemento de ensamblaje para hacer el empaquetado.
Los objetivos de unpack-dependencies
copy-dependencies
unpack-dependencies
tienen una propiedad opcional excludeScope que puede configurar para omitir las dependencias provided
. La siguiente configuración copia todas las dependencias en target / lib, su descriptor de complemento de ensamblaje puede modificarse para usar un fileSet de fileSet para incluir esos fileSet .
Actualización: acabo de probar esto para confirmar que funciona. Se agregó la configuración para vincular el complemento de ensamblaje a la fase del paquete y las modificaciones relevantes al descriptor de ensamblaje.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>process-resources</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<excludeScope>provided</excludeScope>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<id>jar-with-deps</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
<configuration>
<descriptors>
<descriptor>src/main/assembly/my-assembly.xml</descriptor>
</descriptors>
</configuration>
</plugin>
La sección fileSet del descriptor my-assembly
se vería así:
<assembly>
<fileSets>
<fileSet>
<directory>${project.build.directory}/lib</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.*</include>
</includes>
</fileSet>
</fileSets>
...
</assembly>