Exécuter une méthode principale Java dans Maven

1. Vue d'ensemble

Dans ce court didacticiel, nous allons voir comment exécuter des méthodes principales arbitraires à partir de n'importe quelle classe Java à l'aide de Maven.

2. Le plugin exec-maven

Supposons que nous ayons la classe suivante:

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

Et nous voulons exécuter sa méthode principale à partir de la ligne de commande via Maven.

Pour ce faire, nous pouvons utiliser le plugin exec-maven-plugin . Pour être plus précis, l' objectif exec: java de ce plugin exécute la classe Java fournie avec les dépendances du projet englobant comme chemin de classe.

Pour exécuter la méthode principale de la classe Exec , nous devons passer le nom complet de la classe au plugin:

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

Comme indiqué ci-dessus, nous utilisons la propriété système exec.mainClass pour transmettre le nom de classe complet.

De plus, nous devons nous assurer que le classpath est prêt avant d'exécuter la méthode main. C'est pourquoi nous compilons le code source avant d'exécuter la méthode main.

Nous pouvons réaliser la même chose avec java et javac. Cependant, cela peut être fastidieux lorsque nous travaillons avec un chemin de classe assez volumineux. Au contraire,lors de l'utilisation de ce plugin, Maven s'occupe automatiquement de remplir le classpath.

3. Passer des arguments

Il est également possible de passer des arguments de la ligne de commande à la méthode principale. Pour ce faire, nous pouvons utiliser la propriété système 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]

Comme indiqué ci-dessus, nous transmettons une liste d'arguments séparés par des espaces. De plus, nous pouvons utiliser une liste d'arguments séparés par des virgules via la propriété système 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]

Ces deux options peuvent être utiles lorsque nous voulons utiliser le délimiteur (espace ou virgule) dans l'argument lui-même.

4. Configuration personnalisée

Nous pouvons également déclarer explicitement la dépendance du plugin dans notre pom.xml . De cette façon, nous pouvons utiliser des configurations personnalisées et par défaut.

Par exemple, nous pouvons spécifier une classe principale par défaut dans la configuration du plugin:

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

Maintenant, si nous ne spécifions pas le nom complet de la classe souhaitée, com.baeldung.main.Exec sera utilisé:

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

Cependant, il est toujours possible de remplacer cette configuration par défaut via un exécutable explicite . Propriété système mainClass .

De plus, nous pouvons également spécifier des arguments de programme par défaut dans notre configuration:

 com.baeldung.main.Exec  First Second  

De cette façon, nous n'aurons pas besoin de passer ces arguments sur la ligne de commande:

$ 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]

En plus de ces configurations, il y en a beaucoup plus disponibles qui sont couvertes dans la documentation officielle.

5. Conclusion

Dans ce court article, nous avons vu comment exécuter les principales méthodes depuis la ligne de commande via exec-maven-plugin .

Comme d'habitude, tous les exemples sont disponibles sur over sur GitHub.