Exclusion des dépendances" fournies " de Maven assembly
j'essaie d'utiliser le plugin Maven assembly pour construire un jar-with-dependencies,sauf ceux qui ont fourni la portée.
j'ai copié les jar-with-dependencies dans une assemblée.fichier xml et configuré son utilisation dans mon pompon. Ici, c'est pour référence:
<?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>
j'ai découvert, que si je mets la portée à provided
, alors je peux construire un pot qui contient exactement ce que je ne pas vouloir, mais je ne peux pas trouver comment obtenir inverse le comportement de cette.
4 réponses
C'est un peu grotesque, mais vous pouvez utiliser le plugin Maven-dependency-plugin pour copier/déballer toutes les dépendances dans votre projet, puis utiliser le plugin assembly pour faire l'empaquetage.
copy-dependencies
et unpack-dependencies
les deux buts ont un excludeScope propriété que vous pouvez définir pour omettre l' provided
dépendances. La configuration ci-dessous copie toutes les dépendances dans target/lib, votre descripteur de plugin d'assemblage peut être modifié pour utiliser un fileSet pour inclure ces pots.
mise à jour: vient de tester ceci pour confirmer que cela fonctionne. Ajouté la configuration pour lier le plugin d'assemblage à la phase paquet, et les modifications pertinentes au descripteur d'assemblage.
<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 section fileSet de la my-assembly
le descripteur ressemblerait à ceci:
<assembly>
<fileSets>
<fileSet>
<directory>${project.build.directory}/lib</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>*.*</include>
</includes>
</fileSet>
</fileSets>
...
</assembly>
en théorie les tags "ignoreNonCompile" et "exclusidescope" devraient aider, mais être avertis qu'ils ne fonctionnent pas nécessairement correctement.
avec maven3 et le maven-dependency-plugin 2.4, une solution est:
<configuration>
<excludeArtifactIds>junit,mockito-all</excludeArtifactIds>
<excludeTransitive>true</excludeTransitive>
</configuration>
Avec la dernière Maven (j'ai été le tester sur Maven 3.0) cela semble fonctionner comme prévu, avec quelques mises en garde:
la portée demandée (dans l'ensemble de dépendances) peut inclure des portées supplémentaires basées sur la définition suivante: http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
ainsi, si vous demandez la compilation scope, vous obtiendrez à la fois la compilation et la fourniture. Cependant, si vous demandez runtime scope, vous devez obtenez la compilation et l'exécution (mais pas fourni).
C'est un ancien post, mais le maven-dependency-plugin a maintenant une option "exclusidescope" que vous pouvez définir à "provided" ou n'importe quelle portée dont vous avez besoin.
http://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html#excludeScope
Par exemple,
<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>