Стартирайте основния метод на Java в Maven

1. Общ преглед

В този кратък урок ще видим как да стартираме произволни основни методи от всеки клас на Java, използвайки Maven.

2. Приставката exec-maven

Да предположим, че имаме следния клас:

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

И ние искаме да изпълним основния му метод от командния ред чрез Maven.

За да направим това, можем да използваме плъгина exec-maven . За да бъдем по-конкретни, целта exec: java от този плъгин изпълнява предоставения клас Java с включените зависимости на проекта като път на класа.

За да изпълним основния метод на класа Exec , трябва да предадем напълно квалифицираното име на класа на приставката:

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

Както е показано по-горе, използваме системното свойство exec.mainClass , за да предадем напълно квалифицираното име на класа.

Също така трябва да се уверим, че пътят на класа е готов, преди да стартираме основния метод. Ето защо компилираме изходния код, преди да изпълним основния метод.

Можем да постигнем същото с обикновена java и javac. Това обаче може да бъде тромаво, когато работим с доста голяма пътека на класа. Напротив,когато използвате този плъгин, Maven автоматично се грижи за попълване на пътя на класа.

3. Предаване на аргументи

Също така е възможно да се предават аргументи от командния ред на основния метод. За да направим това, можем да използваме системното свойство 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]

Както е показано по-горе, предаваме списък с аргументи, разделени с интервал. Освен това можем да използваме разделен със запетая списък с аргументи чрез системното свойство 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]

Тези две опции могат да бъдат полезни, когато искаме да използваме разделителя (интервал или запетая) в самия аргумент.

4. Персонализирана конфигурация

Също така можем изрично да декларираме зависимостта на приставката в нашия pom.xml . По този начин можем да използваме персонализирани и стандартни конфигурации.

Например, можем да посочим основен клас по подразбиране в конфигурацията на приставката:

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

Сега, ако не посочим напълно квалифицираното име на желания клас, ще се използва com.baeldung.main.Exec :

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

Все пак е възможно да се замени тази конфигурация по подразбиране чрез изричен exec . mainClass системно свойство.

Освен това можем да посочим и програмни аргументи по подразбиране в нашата конфигурация:

 com.baeldung.main.Exec  First Second  

По този начин няма да е необходимо да предаваме тези аргументи в командния ред:

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

В допълнение към тези конфигурации има още много налични, които са обхванати в официалната документация.

5. Заключение

В тази кратка статия видяхме как да стартираме основните методи от командния ред чрез exec-maven-plugin .

Както обикновено, всички примери са достъпни в GitHub.