plugin exclude dependency create maven classpath war maven-war-plugin

exclude - maven repository



En Maven, ¿cómo se usa el classpath? (6)

Para mis propósitos actuales, tengo un proyecto Maven que crea un archivo war , y quiero ver qué classpath real está usando al crear la war . ¿Hay alguna forma de hacerlo en un solo comando, sin tener que compilar todo el proyecto?

Una idea es hacer que Maven genere el archivo target/classpath.properties y luego detenerse en ese punto.


Como señaló ecerulm en su comentario a la respuesta de Janik , quizás desee especificar el alcance de la dependency:build-classpath , ya que la salida de classpath diferirá para diferentes ámbitos (de manera predeterminada, la test se usa por algún motivo). Terminé con un comando como este:

mvn -DincludeScope=compile dependency:build-classpath

Dentro del POM, podría usarse así:

<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>build-classpath</id> <phase>generate-sources</phase> <goals> <goal>build-classpath</goal> </goals> <configuration> <includeScope>compile</includeScope> <!-- Omit to print on console: --> <outputFile>${project.build.directory}/compile-classpath.txt</outputFile> </configuration> </execution> <execution> <id>build-test-classpath</id> <phase>generate-test-sources</phase> <goals> <goal>build-classpath</goal> </goals> <configuration> <includeScope>test</includeScope> <!-- Omit to print on console: --> <outputFile>${project.build.directory}/test-classpath.txt</outputFile> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>

Esto generará 2 versiones de classpath, una para la compilación principal y la otra para las pruebas.


El comando mvn dependency:list classpath con todos los jar utilizados para la compilación, el tiempo de ejecución y la prueba en el siguiente formato:

mvn -q exec:java -Dexec.mainClass="Main"

El único requisito es que la compilación finalice. No funciona si la compilación no se ejecuta.

Otro comando es el comando mvn dependency:tree .


Esta es una solución de comando único pero compila el código .

mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P ''/-classpath .*? '' | awk ''{print $2}''

  • Está basado en la answer previa de (Gracias por cierto)

Uso del ejemplo del script de shell

MAVEN_CLASSPATH=$(mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P ''/-classpath .*? '' | awk ''{print $2}'')

Usé una variación de este en un script de shell para ejecutar un main () independiente (para la generación de esquema Hibernate) de esta manera

#/bin/bash MAVEN_TEST_CLASSPATH=$(mvn -e -X clean package | grep -o -P ''/-classpath .*?test.*? '') java $MAVEN_TEST_CLASSPATH foo.bar.DBSchemaCreate

Ejemplo de salida de archivo

mvn -e -X -Dmaven.test.skip=true clean compile | grep -o -P ''/-classpath .*? '' | awk ''{print $2}'' > maven.classpath


Este comando genera el classpath en Mac y Linux:

INFO] --- maven-dependency-plugin:2.8:list (default-cli) @ MyProject --- [INFO] [INFO] The following files have been resolved: [INFO] org.netbeans.api:org-openide-filesystems:jar:RELEASE80:compile [INFO] org.netbeans.api:org-netbeans-modules-queries:jar:RELEASE80:compile [INFO] org.netbeans.api:org-netbeans-api-progress:jar:RELEASE80:compile [INFO] org.netbeans.api:org-openide-dialogs:jar:RELEASE80:compile [INFO] org.apache.derby:derby:jar:10.11.1.1:compile [INFO] org.netbeans.api:org-openide-windows:jar:RELEASE80:compile

Tener el resultado impreso y no guardado en un archivo puede ser útil, por ejemplo, cuando se asigna el resultado a una variable en un script Bash. Esta solución solo se ejecuta en Mac y Linux, pero también lo hacen los guiones de shell de Bash.

En Windows (por ejemplo, en archivos BAT), donde no hay un ejecutable de echo , necesitará algo como esto (no probado):

mvn -q exec:exec -Dexec.executable=echo -Dexec.args="%classpath"

Alternativamente, puede ejecutar el programa java con classpath:

mvn -q exec:exec -Dexec.executable=cmd -Dexec.args="/c echo %classpath"

O incluso así (usará la ruta de clases correcta automáticamente):

mvn -q exec:exec -Dexec.executable=java -Dexec.args="-cp %classpath Main"

Sin embargo, estos dos enfoques alternativos sufren cuando Maven agrega sus mensajes de error cuando falla su programa.


Para obtener el classpath solo en un archivo, puede:

mvn dependency:build-classpath -Dmdep.outputFile=cp.txt

O agregue esto a POM.XML:

<project> [...] <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.9</version> <executions> <execution> <id>build-classpath</id> <phase>generate-sources</phase> <goals> <goal>build-classpath</goal> </goals> <configuration> <!-- configure the plugin here --> </configuration> </execution> </executions> </plugin> </plugins> </build> [...] </project>

De: http://maven.apache.org/plugins/maven-dependency-plugin/usage.html


o llame a "mvn -e -X ..." y verifique la salida ...