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 .