Esegui un metodo principale Java in Maven

1. Panoramica

In questo breve tutorial, vedremo come eseguire metodi principali arbitrari da qualsiasi classe Java utilizzando Maven.

2. Il plugin exec-maven

Supponiamo di avere la seguente classe:

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)); } } }

E vogliamo eseguire il suo metodo principale dalla riga di comando tramite Maven.

Per fare ciò, possiamo usare il plugin exec-maven . Per essere più specifici, l' obiettivo exec: java di questo plugin esegue la classe Java fornita con le dipendenze del progetto che la racchiude come classpath.

Per eseguire il metodo principale della classe Exec , dobbiamo passare il nome completo della classe al plugin:

$ mvn compile exec:java -Dexec.mainClass="com.baeldung.main.Exec" 02:26:45.112 INFO com.baeldung.main.Exec - Running the main method

Come mostrato sopra, stiamo usando la proprietà di sistema exec.mainClass per passare il nome completo della classe.

Inoltre, dobbiamo assicurarci che il classpath sia pronto prima di eseguire il metodo main. Ecco perché stiamo compilando il codice sorgente prima di eseguire il metodo principale.

Possiamo ottenere la stessa cosa con java e javac normali . Tuttavia, questo può essere complicato quando lavoriamo con un percorso di classe piuttosto grande. Anzi,quando si utilizza questo plugin, Maven si occupa automaticamente di popolare il classpath.

3. Passaggio di argomenti

È anche possibile passare argomenti dalla riga di comando al metodo principale. Per fare ciò, possiamo usare la proprietà di 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]

Come mostrato sopra, stiamo passando un elenco di argomenti separati da spazi. Inoltre, possiamo utilizzare un elenco di argomenti separati da virgole tramite la proprietà di 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]

Queste due opzioni possono essere utili quando vogliamo utilizzare il delimitatore (spazio o virgola) nell'argomento stesso.

4. Configurazione personalizzata

Possiamo anche dichiarare esplicitamente la dipendenza dal plugin nel nostro pom.xml . In questo modo, possiamo utilizzare configurazioni personalizzate e predefinite.

Ad esempio, possiamo specificare una classe principale predefinita nella configurazione del plugin:

   org.codehaus.mojo exec-maven-plugin 3.0.0  com.baeldung.main.Exec    

Ora, se non specifichiamo il nome completo della classe desiderata, verrà utilizzato com.baeldung.main.Exec :

$ mvn compile exec:java 02:33:14.197 INFO com.baeldung.main.Exec - Running the main method

Tuttavia, è ancora possibile sovrascrivere questa configurazione predefinita tramite un exec esplicito . proprietà di sistema mainClass .

Inoltre, possiamo anche specificare gli argomenti del programma predefinito nella nostra configurazione:

 com.baeldung.main.Exec  First Second  

In questo modo non avremo bisogno di passare questi argomenti sulla riga di 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]

Oltre a queste configurazioni, ce ne sono molte altre disponibili che sono trattate nella documentazione ufficiale.

5. conclusione

In questo breve articolo, abbiamo visto come eseguire i metodi principali dalla riga di comando tramite exec-maven-plugin .

Come al solito, tutti gli esempi sono disponibili su GitHub.