Voer een Java-hoofdmethode uit in Maven

1. Overzicht

In deze korte tutorial gaan we zien hoe je met Maven willekeurige hoofdmethoden kunt uitvoeren vanuit elke Java-klasse.

2. Het exec-maven-plugin

Stel dat we de volgende klasse hebben:

openbare klasse Exec {privé statische laatste Logger LOGGER = LoggerFactory.getLogger (Exec.class); public static void main (String [] args) {LOGGER.info ("De hoofdmethode wordt uitgevoerd"); if (args.length> 0) {LOGGER.info ("Lijst met argumenten: {}", Arrays.toString (args)); }}}

En we willen de belangrijkste methode uitvoeren vanaf de opdrachtregel via Maven.

Om dit te doen, kunnen we de exec-maven-plugin. Om specifieker te zijn, de exec: java doel van deze plug-in voert de geleverde Java-klasse uit met de afhankelijkheden van het omsluitende project als het klassenpad.

Om de hoofdmethode van het Exec class, moeten we de volledig gekwalificeerde naam van de class doorgeven aan de plug-in:

$ mvn compileer exec: java -Dexec.mainClass = "com.baeldung.main.Exec" 02: 26: 45.112 INFO com.baeldung.main.Exec - De hoofdmethode uitvoeren

Zoals hierboven weergegeven, gebruiken we de exec.mainClass systeemeigenschap om de volledig gekwalificeerde klassenaam door te geven.

We moeten er ook voor zorgen dat het klassenpad gereed is voordat de hoofdmethode wordt uitgevoerd. Daarom compileren we de broncode voordat we de hoofdmethode uitvoeren.

We kunnen hetzelfde bereiken met plain Java en Javac. Dit kan echter omslachtig zijn als we met een behoorlijk groot klassenpad werken. Integendeel,bij gebruik van deze plug-in zorgt Maven automatisch voor het vullen van het klassenpad.

3. Argumenten doorgeven

Het is ook mogelijk om argumenten door te geven vanaf de opdrachtregel naar de hoofdmethode. Om dat te doen, kunnen we de exec.args systeemeigenschap:

$ mvn compileer exec: java -Dexec.mainClass = "com.baeldung.main.Exec" \ -Dexec.args = "Eerste seconde" 02: 31: 08.235 INFO com.baeldung.main.Exec - Draait de hoofdmethode 02: 31: 08.236 INFO com.baeldung.main.Exec - Lijst met argumenten: [First, Second]

Zoals hierboven getoond, geven we een door spaties gescheiden lijst met argumenten door. Bovendien kunnen we een door komma's gescheiden lijst met argumenten gebruiken via de exec.argumenten systeemeigenschap:

$ mvn compileer exec: java -Dexec.mainClass = "com.baeldung.main.Exec" \ -Dexec.arguments = "Hallo wereld, doei" 02: 32: 25.616 INFO com.baeldung.main.Exec - De hoofdmethode wordt uitgevoerd 02: 32: 25.618 INFO com.baeldung.main.Exec - Lijst met argumenten: [Hello World, Bye]

Deze twee opties kunnen handig zijn als we het scheidingsteken (spatie of komma) in het argument zelf willen gebruiken.

4. Aangepaste configuratie

We kunnen de afhankelijkheid van de plug-in ook expliciet aangeven in onze pom.xml. Op deze manier kunnen we aangepaste en standaardconfiguraties gebruiken.

We kunnen bijvoorbeeld een standaard hoofdklasse specificeren in de configuratie van de plug-in:

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

Als we nu niet de volledig gekwalificeerde naam van de gewenste klasse specificeren, com.baeldung.main.Exec zal gebruikt worden:

$ mvn compileren exec: java 02: 33: 14.197 INFO com.baeldung.main.Exec - De hoofdmethode uitvoeren

Het is echter nog steeds mogelijk om deze standaardconfiguratie te overschrijven via een expliciet exec.mainClass systeemeigenschap.

Bovendien kunnen we ook standaard programma-argumenten specificeren in onze configuratie:

 com.baeldung.main.Exec Eerste seconde 

Op deze manier hoeven we deze argumenten niet op de opdrachtregel door te geven:

$ mvn clean compile exec: java 02: 34: 24.448 INFO com.baeldung.main.Exec - Draait de hoofdmethode 02: 34: 24.450 INFO com.baeldung.main.Exec - Lijst met argumenten: [First, Second]

Naast deze configuraties zijn er nog veel meer beschikbaar die worden behandeld in de officiële documentatie.

5. Conclusie

In dit korte artikel hebben we gezien hoe we de belangrijkste methoden kunnen uitvoeren vanaf de opdrachtregel via exec-maven-plugin.

Zoals gewoonlijk zijn alle voorbeelden beschikbaar op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found