Tengo el siguiente problema. Me gustaría ejecutar mvn
desde la línea de comandos para un Main.java
archivo. Main.java
acepta un parámetro. ¿Cómo hago eso desde la línea de comandos?
Intenté encontrar un ejemplo pero no tuve éxito. ¿Alguien podría ayudarme dándome un ejemplo de eso?
Miré aquí pero no entendí muy bien qué debía hacer.
Además, ¿cómo ejecuto ese comando desde una carpeta diferente a la carpeta Main.java?
por ejemplo, Main.java
se encuentra en my/java/program/Main.java
. Que debo poner en
mvn exec:java -Dexec.mainClass="what to put here?" -Dexec.args="arg0 arg1 arg2"
Respuestas:
Usted podría funcionar:
mvn exec:exec -Dexec.args="arg1"
.Esto pasará el argumento arg1 a su programa.
Debe especificar la clase principal completamente calificada, por ejemplo, un Main.java que está en una prueba de paquete necesitaría
mvn exec:java -Dexec.mainClass=test.Main
Al usar el
-f
parámetro, como se describe aquí , también puede ejecutarlo desde otros directorios.mvn exec:java -Dexec.mainClass=test.Main -f folder/pom.xm
Para varios argumentos, simplemente sepárelos con un espacio como lo haría en la línea de comandos.
mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="arg1 arg2 arg3"
Para los argumentos separados por a space, puede agrupar utilizando
'argument separated with space'
entre comillas.mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="'argument separated with space' 'another one'"
fuente
Además de ejecutarlo con
mvn exec:java
, también puede ejecutarlo conmvn exec:exec
mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath your.package.MainClass"
fuente
-Dexec.args
:mvn exec:exec -Dexec.executable="java" -Dexec.args="-Xmx4g -classpath %classpath your.package.MainClass"
Agregar un script de shell, por ejemplo, lo
run.sh
hace mucho más fácil:#!/usr/bin/env bash export JAVA_PROGRAM_ARGS=`echo "$@"` mvn exec:java -Dexec.mainClass="test.Main" -Dexec.args="$JAVA_PROGRAM_ARGS"
Entonces puedes ejecutar:
fuente
$@
almacena todos los argumentos en una lista de cadenas entre comillas. Si desea usarlo directamente, puede usar$*
todos los argumentos como una sola cadena. ¿Intentaste esto?