plugin example dependency compiler maven maven-dependency-plugin

example - maven-jar-plugin



¿Dependencias de filtro copiadas por la dependencia de copia de Maven? (3)

Necesito esencialmente lograr lo siguiente:

  1. Construye mi biblioteca en un JAR. (Fácil, ya hecho.)
  2. Copie las dependencias de mi biblioteca en una carpeta local, incluido el JAR del proyecto principal, excluyendo las dependencias marcadas como provided .

Parece que no puedo terminar la segunda parte. ¿Hay una mejor manera de hacerlo que la forma en que lo hago a continuación? Básicamente, estoy implementando estos archivos JAR en un directorio lib en un servidor. Desafortunadamente, el siguiente código incluye todos los JAR, incluso los provided , pero no incluye el JAR de salida del proyecto. ¿Debo usar un complemento diferente para esto?

<?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>


Añadiendo mis dos centavos.

Poner el <excludeScope>provided</excludeScope> en la ejecución no funcionó.

Para excluir los tarros proporcionados, ponga el elemento fuera de la ejecución:

<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <configuration> <excludeScope>provided</excludeScope> </configuration> </plugin>

Comando: mvn dependency:copy-dependencies : mvn dependency:copy-dependencies .

Los tarros se copian a target/dependency .


Como se documenta here , puede intentar configurar el parámetro excludeScope para excluir a los dependientes con el alcance provided .

<excludeScope>provided</excludeScope>

En cuanto al complemento que excluye el proyecto actual, supongo que esto es por diseño.
Podrías crear un proyecto de maven separado para hacer este trabajo.


Para evitar que se conecten para recopilar las dependencias proporcionadas , puede usar la solución @Raghuram (+1 para eso). Intenté también omitir las dependencias del alcance de la prueba y descubrí que no se puede hacer tan simple, ya que la prueba significa " todo " en el complemento semántico.

Entonces, la solución para excluir el alcance provisto y de la prueba es incluir el tiempo de ejecución de Microscopio.

<includeScope>runtime</includeScope>

Después de recopilar las dependencias, puede copiar el jar de proyectos con el maven-antrun-plugin al directorio de destino, por ejemplo:

<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>

No conozco ninguna otra solución, además de crear un nuevo pom-dist.xml (tal vez <packaging>pom</packaging> ) que solo guarda la dependencia de su biblioteca y recopila todas las dependencias transitivas exclusivo de prueba / alcance provisto. Puede ejecutar esto con el mvn -f pom-dist.xml package si no desea proporcionar un proyecto completamente nuevo.