Dépendances de filtre copiées par la dépendance de copie de Maven?
Je dois essentiellement accomplir ce qui suit:
- construire ma bibliothèque dans un pot. (Facile, déjà fait.)
- Copiez les dépendances de ma bibliothèque dans un dossier local, y compris le fichier JAR du projet principal, à l'exclusion des dépendances marquées comme
provided
.
Je n'arrive pas à terminer la deuxième partie. Y a-t-il une meilleure façon de le faire que comment je le fais ci-dessous? Je déploie essentiellement ces fichiers JAR dans un répertoire lib sur un serveur. Malheureusement, le code ci-dessous comprend tous JARs, même provided
, mais n'inclut pas le JAR de sortie du projet. Devrais-je utiliser un plugin différent pour cela?
<?xml version="1.0"?>
<project>
...
<dependencies>
<dependency>
<groupId>com.provided</groupId>
<artifactId>provided-lib</artifactId>
<version>1.2.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.1</version>
</dependency>
...
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>/hello</outputDirectory>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
3 réponses
Pour empêcher le branchement de collecter fourni dépendances, vous pouvez utiliser la solution @ Raghuram (+1 pour cela). J'ai également essayé de sauter test dépendances étendues et trouvé le problème qu'il ne peut pas être fait aussi simple-comme test signifie 'tout ' dans la sémantique du plugin.
, Donc la solution à exclure condition et test portée est de includeScope runtime.
<includeScope>runtime</includeScope>
Après avoir collecté les dépendances, vous pouvez Copiez le pot de projets avec le Maven-antrun-plugin dans le répertoire cible, par exemple:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${java.io.tmpdir}/test</outputDirectory>
<includeScope>runtime</includeScope>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<tasks>
<copy
file="${build.directory}/${project.artifactId}-${project.version}.jar"
todir="${java.io.tmpdir}/test" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Je ne connais aucune autre solution-à côté de la création d'un nouveau pom-dist.xml (peut-être <packaging>pom</packaging>
) qui contient juste la dépendance à votre bibliothèque et recueille toutes les dépendances transitives test exclusif/portée fournie. Vous pouvez exécuter ceci avec mvn -f pom-dist.xml package
Si vous ne voulez pas fournir un nouveau projet entier.
Comme documenté ici , vous pouvez essayer de définir le paramètre excludeScope
pour exclure les personnes à charge avec la portée provided
.
<excludeScope>provided</excludeScope>
En ce qui concerne le plugin excluant le jar du projet actuel, je suppose que c'est par conception.
Vous pouvez créer un projet Maven séparé pour faire ce travail.
En ajoutant mes deux cents.
Mettre le <excludeScope>provided</excludeScope>
dans l'exécution n'a pas fonctionné.
Pour exclure les pots fournis, placez l'élément en dehors de l'exécution:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<configuration>
<excludeScope>provided</excludeScope>
</configuration>
</plugin>
Commande: mvn dependency:copy-dependencies
.
Sont copiés dans target/dependency
.