Автор оригинала: Mona Mohamadinia.
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 system для передачи полного имени класса.
Кроме того, мы должны убедиться, что путь к классу готов, прежде чем запускать основной метод. Вот почему мы компилируем исходный код перед выполнением основного метода.
Мы можем добиться того же с помощью простых java и javac. Однако это может быть громоздко, когда мы работаем с довольно большим классом. Напротив, при использовании этого плагина Maven автоматически позаботится о заполнении пути к классу.
3. Передача Аргументов
Также можно передавать аргументы из командной строки в основной метод. Для этого мы можем использовать свойство exec.args system:
$ 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 .