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