使用Gradle+Spring Boot构建JavaFX安装包时jpackage报错求助
Spring Boot + JavaFX jpackage 打包错误排查
正在为支持Mac和Windows的Spring Boot JavaFX应用构建安装包,执行./gradlew jpackage命令时出现两个关键错误:
module not found: javafx.base requires javafx.base;- 调试阶段出现
Unsupported class file major version 66
已尝试Stack Overflow等平台的多种解决方案,但问题仍未解决。当前使用Java 21,不确定是否存在兼容性问题。以下是使用的配置和操作步骤:
build.gradle 配置
plugins { id 'org.springframework.boot' version '3.3.2' id 'io.spring.dependency-management' version '1.1.6' id 'java' id 'application' id 'jacoco' id 'org.openjfx.javafxplugin' version '0.0.13' id 'org.beryx.jlink' version '2.26.0' } group = 'com.company' version = '1.0.0' sourceCompatibility = '21' repositories { mavenLocal() mavenCentral() } dependencies { // Spring Dependencies implementation 'org.springframework.boot:spring-boot-starter' implementation 'org.springframework.boot:spring-boot-starter-batch' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-data-mongodb' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-webflux' // External Dependencies compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.6.0' implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.2' implementation 'com.fasterxml.jackson.core:jackson-annotations:2.17.2' implementation 'io.netty:netty-resolver-dns-native-macos:4.1.72.Final:osx-aarch_64' implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5' runtimeOnly 'com.h2database:h2:2.3.230' // Test Dependencies testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.batch:spring-batch-test' } tasks.named('test') { useJUnitPlatform() finalizedBy jacocoTestReport } javafx { version = "21" modules = [ 'javafx.controls', 'javafx.fxml' ] // 'javafx.base' (also tried with this) } application { mainModule = 'com.company.accountmanagement' // Replace with your main module name mainClass = 'com.company.AccountManagementApplication.main' // Replace with your main class } jlink { imageZip = project.file("${buildDir}/distributions/app-${javafx.platform.classifier}.zip") options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages'] launcher { name = 'app' } jpackage { jpackageHome = '/Library/Java/JavaVirtualMachines/jdk-21.jdk/Contents/Home' installerType = 'dmg' imageOptions = [] installerOptions = [ '--resource-dir', "${projectDir}/src/main/resources", '--vendor', 'Company Name' ] installerName = 'AccountManagement' appVersion = '1.0.0' if (org.gradle.internal.os.OperatingSystem.current().windows) { installerOptions += ['--win-dir-chooser', '--win-menu', '--win-shortcut'] imageOptions += ["--icon", "${projectDir}/src/main/resources/icon.ico"] } if (org.gradle.internal.os.OperatingSystem.current().macOsX) { installerOptions += ['--mac-package-name', 'AccountManagement'] imageOptions += ["--icon", "${projectDir}/src/main/resources/icon.icns"] } } } tasks.jlink { group = 'distribution' } tasks.jpackage { group = 'distribution' }
执行步骤
- 构建应用:
./gradlew build - 创建运行时镜像和安装包:
./gradlew jpackage
module-info.java 配置
怀疑问题和模块声明有关,但检查后未发现明显问题:
module com.company.accountmanagement { requires javafx.base; requires javafx.controls; requires javafx.fxml; requires javafx.graphics; requires spring.boot; requires spring.context; requires jasypt.spring.boot; requires spring.boot.autoconfigure; opens com.company.accountmanagement to javafx.fxml; exports com.company.accountmanagement; }
内容的提问来源于stack exchange,提问作者Murat Yıldız
相关产品推荐
相关产品推荐

