Рубрики
Без рубрики

Запустите метод Java Main в Maven

Узнайте, как запустить основной метод Java с помощью Maven.

Автор оригинала: 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 .