1. Información general
En este breve tutorial, veremos cómo ejecutar métodos principales arbitrarios desde cualquier clase de Java usando Maven.
2. El complemento exec-maven
Supongamos que tenemos la siguiente clase:
public class Exec { private static final Logger LOGGER = LoggerFactory.getLogger(Exec.class); public static void main(String[] args) { LOGGER.info("Running the main method"); if (args.length > 0) { LOGGER.info("List of arguments: {}", Arrays.toString(args)); } } }
Y queremos ejecutar su método principal desde la línea de comandos a través de Maven.
Para hacer esto, podemos usar exec-maven-plugin . Para ser más específico, el objetivo exec: java de este complemento ejecuta la clase Java proporcionada con las dependencias del proyecto adjunto como classpath.
Para ejecutar el método principal de la clase Exec , tenemos que pasar el nombre completo de la clase al complemento:
$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" 02:26:45.112 INFO com.baeldung.main.Exec - Running the main method
Como se muestra arriba, estamos usando la propiedad del sistema exec.mainClass para pasar el nombre de clase completamente calificado.
Además, debemos asegurarnos de que la ruta de clases esté lista antes de ejecutar el método principal. Es por eso que estamos compilando el código fuente antes de ejecutar el método principal.
Podemos lograr lo mismo con java y javac simples . Sin embargo, esto puede resultar engorroso cuando trabajamos con un classpath bastante grande. De lo contrario,al usar este complemento, Maven se encarga automáticamente de completar la ruta de clases.
3. Pasar argumentos
También es posible pasar argumentos desde la línea de comandos al método principal. Para hacer eso, podemos usar la propiedad del sistema exec.args :
$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" \ -Dexec.args="First Second" 02:31:08.235 INFO com.baeldung.main.Exec - Running the main method 02:31:08.236 INFO com.baeldung.main.Exec - List of arguments: [First, Second]
Como se muestra arriba, estamos pasando una lista de argumentos separados por espacios. Además, podemos usar una lista de argumentos separados por comas a través de la propiedad del sistema exec.arguments :
$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" \ -Dexec.arguments="Hello World,Bye" 02:32:25.616 INFO com.baeldung.main.Exec - Running the main method 02:32:25.618 INFO com.baeldung.main.Exec - List of arguments: [Hello World, Bye]
Estas dos opciones pueden ser útiles cuando queremos usar el delimitador (espacio o coma) en el argumento en sí.
4. Configuración personalizada
También podemos declarar explícitamente la dependencia del complemento en nuestro pom.xml . De esta forma, podemos utilizar configuraciones personalizadas y predeterminadas.
Por ejemplo, podemos especificar una clase principal predeterminada en la configuración del complemento:
org.codehaus.mojo exec-maven-plugin 3.0.0 com.baeldung.main.Exec
Ahora, si no especificamos el nombre completo de la clase deseada, se usará com.baeldung.main.Exec :
$ mvn compile exec:java 02:33:14.197 INFO com.baeldung.main.Exec - Running the main method
Sin embargo, todavía es posible anular esta configuración predeterminada a través de un exec explícito . propiedad del sistema mainClass .
Además, también podemos especificar argumentos de programa predeterminados en nuestra configuración:
com.baeldung.main.Exec First Second
De esta forma no necesitaremos pasar estos argumentos en la línea de comando:
$ mvn clean compile exec:java 02:34:24.448 INFO com.baeldung.main.Exec - Running the main method 02:34:24.450 INFO com.baeldung.main.Exec - List of arguments: [First, Second]
Además de estas configuraciones, hay muchas más disponibles que se tratan en la documentación oficial.
5. Conclusión
En este breve artículo, vimos cómo ejecutar los métodos principales desde la línea de comandos a través de exec-maven-plugin .
Como de costumbre, todos los ejemplos están disponibles en GitHub.