«1. Введение
В этом руководстве мы рассмотрим различные методы выполнения основного метода Java с помощью Gradle.
2. Основной метод Java
Есть несколько способов запуска основного метода Java с помощью Gradle. Давайте рассмотрим их внимательно, используя простую программу, которая выводит сообщение на стандартный вывод: задачи, которые помогают нам упаковывать и распространять наше приложение.
public class MainClass {
public static void main(String[] args) {
System.out.println("Goodbye cruel world ...");
}
}
Давайте начнем с того, что вставим следующее в наш файл build.gradle:
Плагин автоматически создает задачу с именем run, которая требует от нас только указания на основной класс. Замыкание в строке 9 делает именно то, что позволяет нам запускать задачу:
4. Запуск с помощью задачи JavaExec
plugins {
id "application"
}
apply plugin : "java"
ext {
javaMainClass = "com.baeldung.gradle.exec.MainClass"
}
application {
mainClassName = javaMainClass
}
Далее давайте реализуем пользовательскую задачу для запуска основного метода с помощью Тип задачи JavaExec:
~/work/baeldung/tutorials/gradle-java-exec> ./gradlew run
> Task :run
Goodbye cruel world ...
BUILD SUCCESSFUL in 531ms
2 actionable tasks: 1 executed, 1 up-to-date
Нам нужно определить основной класс в строке 5 и дополнительно указать путь к классам. Путь к классам вычисляется из свойств по умолчанию выходных данных сборки и содержит правильный путь, где фактически размещается скомпилированный класс.
Обратите внимание, что в каждом сценарии мы используем полное имя, включая пакет, основного класса.
task runWithJavaExec(type: JavaExec) {
group = "Execution"
description = "Run the main class with JavaExecTask"
classpath = sourceSets.main.runtimeClasspath
main = javaMainClass
}
Давайте запустим наш пример, используя JavaExec:
5. Запуск с задачей Exec
Наконец, мы можем выполнить наш основной класс, используя базовый тип задачи Exec. Поскольку этот вариант дает нам возможность настроить выполнение несколькими способами, давайте реализуем три настраиваемые задачи и обсудим их по отдельности.
~/work/baeldung/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.1. Запуск из скомпилированного вывода сборки
Сначала мы создаем пользовательскую задачу Exec, которая ведет себя аналогично JavaExec:
Мы можем запустить любой исполняемый файл (в данном случае java) и передать необходимые аргументы для его запуска.
Мы настраиваем путь к классам и указываем на наш основной класс в строке 5, а также добавляем зависимость к задаче сборки в строке 2. Это необходимо, так как мы можем запустить наш основной класс только после его компиляции: ~~ ~
task runWithExec(type: Exec) {
dependsOn build
group = "Execution"
description = "Run the main class with ExecTask"
commandLine "java", "-classpath", sourceSets.main.runtimeClasspath.getAsPath(), javaMainClass
}
5.2. Запуск из выходного файла Jar
Второй подход основан на упаковке jar нашего небольшого приложения:
~/work/baeldung/tutorials/gradle-java-exec> ./gradlew runWithExec
> Task :runWithExec
Goodbye cruel world ...
BUILD SUCCESSFUL in 666ms
6 actionable tasks: 6 executed
Обратите внимание на зависимость от задачи jar в строке 2 и второго аргумента исполняемого файла java в строке 5. Мы использовать обычный jar, поэтому нам нужно указать точку входа с четвертым параметром:
5.3. Запуск из исполняемого выходного файла 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, но мы определяем точку входа с помощью свойства манифеста:
~/work/baeldung/tutorials/gradle-java-exec> ./gradlew runWithExecJarOnClassPath
> Task :runWithExecJarOnClassPath
Goodbye cruel world ...
BUILD SUCCESSFUL in 555ms
3 actionable tasks: 3 executed
Здесь нам больше не нужно указывать путь к классам, и мы можем просто запустить банку:
6. Заключение
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()
}
В этой статье мы рассмотрели различные способы запуска основного метода Java с помощью Gradle.
~/work/baeldung/tutorials/gradle-java-exec> ./gradlew runWithExecJarExecutable
> Task :runWithExecJarExecutable
Goodbye cruel world ...
BUILD SUCCESSFUL in 572ms
3 actionable tasks: 3 executed
По умолчанию плагин Application предоставляет минимально настраиваемую задачу для запуска нашего метода. Тип задачи JavaExec позволяет нам запускать основной метод без указания каких-либо плагинов.
Наконец, общий тип задачи Exec может использоваться в различных комбинациях с исполняемым файлом java для достижения тех же результатов, но требует зависимости от других задач.
Как обычно, исходный код этого руководства доступен на GitHub.
«
As usual, the source code for this tutorial is available over on GitHub.