Перейти к основному содержимому

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

· 3 мин. чтения

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-plugin . Чтобы быть более конкретным, цель exec:java из этого плагина выполняет предоставленный класс Java с зависимостями прилагаемого проекта в качестве пути к классам.

Чтобы выполнить основной метод класса Exec , мы должны передать плагину полное имя класса:

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

Как показано выше, мы используем системное свойство exec.mainClass для передачи полного имени класса.

Кроме того, мы должны убедиться, что путь к классам готов, прежде чем запускать основной метод. Вот почему мы компилируем исходный код перед выполнением основного метода.

Мы можем добиться того же самого с помощью простых java и javac. Однако это может быть громоздко, когда мы работаем с довольно большим путем к классам. Напротив, `` при использовании этого плагина Maven автоматически позаботится о заполнении пути к классам.

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

Также можно передавать аргументы из командной строки в основной метод. Для этого мы можем использовать системное свойство exec.args :

$ mvn compile exec:java -Dexec.mainClass="com.foreach.main.Exec" \
-Dexec.args="First Second"
02:31:08.235 INFO com.foreach.main.Exec - Running the main method
02:31:08.236 INFO com.foreach.main.Exec - List of arguments: [First, Second]

Как показано выше, мы передаем список аргументов, разделенных пробелами. Более того, мы можем использовать список аргументов через запятую через системное свойство exec.arguments :

$ mvn compile exec:java -Dexec.mainClass="com.foreach.main.Exec" \ 
-Dexec.arguments="Hello World,Bye"
02:32:25.616 INFO com.foreach.main.Exec - Running the main method
02:32:25.618 INFO com.foreach.main.Exec - List of arguments: [Hello World, Bye]

Эти две опции могут быть полезны, когда мы хотим использовать разделитель (пробел или запятую) в самом аргументе.

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

Мы также можем явно объявить зависимость плагина в нашем pom.xml . Таким образом, мы можем использовать пользовательские конфигурации и конфигурации по умолчанию.

Например, мы можем указать основной класс по умолчанию в конфигурации плагина:

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<mainClass>com.foreach.main.Exec</mainClass>
</configuration>
</plugin>
</plugins>
</build>

Теперь, если мы не укажем полное имя нужного класса, будет использоваться com.foreach.main.Exec :

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

Однако по-прежнему возможно переопределить эту конфигурацию по умолчанию с помощью явного exec . Системное свойство mainClass .

Кроме того, мы также можем указать аргументы программы по умолчанию в нашей конфигурации:

<configuration>
<mainClass>com.foreach.main.Exec</mainClass>
<arguments>
<argument>First</argument>
<argument>Second</argument>
</arguments>
</configuration>

Таким образом, нам не нужно будет передавать эти аргументы в командной строке:

$ mvn clean compile exec:java
02:34:24.448 INFO com.foreach.main.Exec - Running the main method
02:34:24.450 INFO com.foreach.main.Exec - List of arguments: [First, Second]

В дополнение к этим конфигурациям доступно множество других, которые описаны в официальной документации .

5. Вывод

В этой короткой статье мы увидели, как запускать основные методы из командной строки через exec-maven-plugin .

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