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

Запустите основной метод Java с помощью Gradle

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

1. Введение

В этом руководстве мы рассмотрим различные методы выполнения основного метода Java `` с помощью Gradle.

2. Основной метод Java

Есть несколько способов запуска основного метода Java с помощью Gradle. Давайте посмотрим на них внимательно, используя простую программу, которая выводит сообщение на стандартный вывод:

public class MainClass {
public static void main(String[] args) {
System.out.println("Goodbye cruel world ...");
}
}

3. Запуск с подключаемым модулем приложения

Плагин приложения — это основной плагин Gradle, который определяет набор готовых к использованию задач, которые помогают нам упаковывать и распространять наше приложение.

Начнем с того, что вставим в наш файл build.gradle следующее :

plugins {
id "application"
}
apply plugin : "java"
ext {
javaMainClass = "com.foreach.gradle.exec.MainClass"
}

application {
mainClassName = javaMainClass
}

Плагин автоматически генерирует задачу под названием run , которая требует от нас только указания на основной класс. Замыкание в строке 9 делает именно это, что позволяет нам запустить задачу:

~/work/foreach/tutorials/gradle-java-exec> ./gradlew run

> Task :run
Goodbye cruel world ...

BUILD SUCCESSFUL in 531ms
2 actionable tasks: 1 executed, 1 up-to-date

4. Запуск с помощью задачи JavaExec

Далее реализуем пользовательскую задачу для запуска основного метода с помощью типа задачи JavaExec :

task runWithJavaExec(type: JavaExec) {
group = "Execution"
description = "Run the main class with JavaExecTask"
classpath = sourceSets.main.runtimeClasspath
main = javaMainClass
}

Нам нужно определить основной класс в строке 5 и дополнительно указать путь к классам. Путь к классам вычисляется из свойств по умолчанию выходных данных сборки и содержит правильный путь, где фактически размещается скомпилированный класс.

Обратите внимание, что в каждом сценарии мы используем полное имя, включая package, основного класса .

Давайте запустим наш пример, используя JavaExec :

~/work/foreach/tutorials/gradle-java-exec> ./gradlew runWithJavaExec

> Task :runWithJavaExec
Goodbye cruel world ...

BUILD SUCCESSFUL in 526ms
2 actionable tasks: 1 executed, 1 up-to-date

5. Запуск с Exec Task

Наконец, мы можем выполнить наш основной класс, используя базовый тип задачи Exec . Поскольку этот вариант дает нам возможность настроить выполнение несколькими способами, давайте реализуем три настраиваемые задачи и обсудим их по отдельности.

5.1. Запуск из скомпилированного вывода сборки

Во-первых, мы создаем пользовательскую задачу Exec , которая ведет себя аналогично JavaExec :

task runWithExec(type: Exec) {
dependsOn build
group = "Execution"
description = "Run the main class with ExecTask"
commandLine "java", "-classpath", sourceSets.main.runtimeClasspath.getAsPath(), javaMainClass
}

Мы можем запустить любой исполняемый файл (в данном случае java) и передать необходимые аргументы для его запуска.

Мы настраиваем путь к классам и указываем на наш основной класс в строке 5, а также добавляем зависимость к задаче сборки в строке 2. Это необходимо, так как мы можем запустить наш основной класс только после его компиляции:

~/work/foreach/tutorials/gradle-java-exec> ./gradlew runWithExec

> Task :runWithExec
Goodbye cruel world ...

BUILD SUCCESSFUL in 666ms
6 actionable tasks: 6 executed

5.2. Запуск из выходного JAR

Второй подход основан на упаковке jar нашего небольшого приложения:

task runWithExecJarOnClassPath(type: Exec) {
dependsOn jar
group = "Execution"
description = "Run the mainClass from the output jar in classpath with ExecTask"
commandLine "java", "-classpath", jar.archiveFile.get(), javaMainClass
}

Обратите внимание на зависимость от задачи jar в строке 2 и второго аргумента исполняемого файла java в строке 5. Мы используем обычный jar, поэтому нам нужно указать точку входа с четвертым параметром:

~/work/foreach/tutorials/gradle-java-exec> ./gradlew runWithExecJarOnClassPath

> Task :runWithExecJarOnClassPath
Goodbye cruel world ...

BUILD SUCCESSFUL in 555ms
3 actionable tasks: 3 executed

5.3. Запуск из исполняемого выходного файла JAR

Третий способ также опирается на упаковку jar, но мы определяем точку входа с помощью свойства манифеста :

jar {
manifest {
attributes(
"Main-Class": javaMainClass
)
}
}

task runWithExecJarExecutable(type: Exec) {
dependsOn jar
group = "Execution"
description = "Run the output executable jar with ExecTask"
commandLine "java", "-jar", jar.archiveFile.get()
}

Здесь нам больше не нужно указывать путь к классам , и мы можем просто запустить банку:

~/work/foreach/tutorials/gradle-java-exec> ./gradlew runWithExecJarExecutable

> Task :runWithExecJarExecutable
Goodbye cruel world ...

BUILD SUCCESSFUL in 572ms
3 actionable tasks: 3 executed

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

В этой статье мы рассмотрели различные способы запуска основного метода Java с помощью Gradle.

По умолчанию плагин Application предоставляет минимально настраиваемую задачу для запуска нашего метода. Тип задачи JavaExec позволяет нам запускать основной метод без указания каких-либо плагинов.

Наконец, общий тип задачи Exec может использоваться в различных комбинациях с исполняемым файлом java для достижения тех же результатов, но требует зависимости от других задач.

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