Вопрос или проблема
Я знаю, что есть похожие вопросы, но они не подходят для моего случая или их решения не работают для меня.
Я создал exe с помощью плагина launch4j, упаковал jre в ту же директорию, что и exe, и указал путь к jre.
Вот мой файл build.gradle :
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.1.0'
id 'edu.sc.seis.launch4j' version '3.0.6'
id 'org.beryx.jlink' version '2.25.0'
}
javafx {
version = "22.0.1"
modules = ['javafx.controls', 'javafx.fxml']
}
launch4j {
mainClassName="org.tiba.App"
icon = "${projectDir}/src/main/resources/icon.ico"
outputDir = "$buildDir/launch4j"
bundledJrePath="jre"
}
task packageExecutableDistribution(type: Zip) {
archiveFileName="myApp.zip" // Имя zip-файла
destinationDirectory = file("$buildDir") // Где сохранить zip-файл
from "$buildDir/launch4j" //включить файлы из этой директории
}
task addJreToDistributable(type: Copy) {
from "javaruntime" // Путь к вашей папке JRE
destinationDir = file("$buildDir/launch4j")
}
packageExecutableDistribution.dependsOn createExe
packageExecutableDistribution.dependsOn addJreToDistributable
jar {
manifest {
attributes('Main-Class': 'org.tiba.App')
}
}
repositories {
mavenCentral()
}
dependencies {
testImplementation libs.junit
implementation libs.guava
implementation group: 'org.xerial', name: 'sqlite-jdbc', version: '3.7.2'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(23)
}
}
application {
// Определите основной класс для приложения.
mainClass="org.tiba.App"
}
Вот моя директория после выполнения следующих команд :
gradle createExe
gradle addJreToDistributable
gradle packageExecutableDistribution
Я ожидал, что exe файл будет работать нормально, используя упакованный jre, но каждый раз, когда я пытаюсь его запустить, появляется всплывающее окно, сообщающее мне, что мне нужен jre 23.0 :
Ответ или решение
Для создания исполняемого файла (.exe) с использованием плагина Launch4j и упаковкой JRE в Gradle, важно корректно настроить конфигурации в вашем файле build.gradle. Давайте разберемся, как это сделать шаг за шагом.
Шаг 1: Проверка структуры проекта
Убедитесь, что структура вашего проекта выглядит следующим образом:
myapp/
├── build.gradle
├── javaruntime/ // Здесь находится ваш JRE
│ ├── jre/
│ └── ...
├── src/
│ └── main/
│ └── resources/
│ └── icon.ico
└── ...
Шаг 2: Обновление build.gradle
Корректно настройте свой build.gradle
. Вам нужно убедиться, что указанный путь к JRE правильный и соответствует тому, где фактически находится ваш JRE. Проверьте, что bundledJrePath
имеет правильный относительный путь к JRE.
Вот пример обновленного файла build.gradle
:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.1.0'
id 'edu.sc.seis.launch4j' version '3.0.6'
id 'org.beryx.jlink' version '2.25.0'
}
javafx {
version = "22.0.1"
modules = ['javafx.controls', 'javafx.fxml']
}
launch4j {
mainClassName = "org.tiba.App"
icon = "${projectDir}/src/main/resources/icon.ico"
outputDir = "$buildDir/launch4j"
bundledJrePath = "jre" // Убедитесь, что путь к JRE корректный
}
task packageExecutableDistribution(type: Zip) {
archiveFileName = "myApp.zip" // Имя zip-файла
destinationDirectory = file("$buildDir") // Место сохранения zip-файла
from "$buildDir/launch4j" // Включение файлов из этого каталога
}
task addJreToDistributable(type: Copy) {
from "javaruntime/jre" // Путь к вашей папке JRE
into "$buildDir/launch4j" // Куда копируем JRE
}
packageExecutableDistribution.dependsOn createExe
packageExecutableDistribution.dependsOn addJreToDistributable
jar {
manifest {
attributes('Main-Class': 'org.tiba.App')
}
}
repositories {
mavenCentral()
}
dependencies {
testImplementation libs.junit
implementation libs.guava
implementation group: 'org.xerial', name: 'sqlite-jdbc', version: '3.7.2'
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(23) // Убедитесь, что версия Java совпадает
}
}
application {
// Определите основной класс для приложения.
mainClass = "org.tiba.App"
}
Шаг 3: Сборка проекта
Запустите команды для сборки вашего проекта, как указано ниже:
gradle createExe
gradle addJreToDistributable
gradle packageExecutableDistribution
Эти команды создадут исполняемый файл и упакуют его вместе с JRE.
Шаг 4: Тестирование исполняемого файла
После выполнения команд, перейдите в папку build/launch4j
и запустите сгенерированный .exe
файл. Убедитесь, что папка с JRE находится в одном каталоге с вашим .exe файлом.
Проблемы и их решения
Если при запуске возникает предупреждение о том, что требуется JRE 23, возможно, путь к JRE указан неправильно или в вашей конфигурации отсутствуют нужные файлы. Проверьте, чтобы структура JRE была корректной и соответствовала:
jre/
├── bin/
├── lib/
└── etc/
Если проблема продолжается, попробуйте изменить bundledJrePath
на абсолютный путь в launch4j
или проконсультируйтесь с документацией Launch4j по рекомендациям по совместимости с JRE.
Заключение
Настройка запуска Java-приложений с помощью Launch4j требует внимательного подхода к путям и структуре проекта. Следуя описанным выше шагам, вы сможете успешно скомпилировать и запустить свое приложение с упакованным JRE.