首次使用JavaFX+Gradle遇JLink报错:找不到module-info.java
解决JavaFX + Gradle + jlink 缺失module-info.java的问题
什么是module-info.java
这是Java模块化系统(JPMS)的核心配置文件,用于声明应用模块名称、依赖的其他模块、对外暴露/开放的包等。jlink工具必须基于模块化代码才能生成包含JavaFX运行时的镜像,缺失该文件会直接导致报错。
具体解决步骤
1. 创建module-info.java文件
在项目的src/main/java目录下新建该文件,路径示例:C:\Users\nicol\spz_app\dev\App\Spz\spz_app\src\main/java/module-info.java
2. 编写module-info.java内容
根据你的项目依赖和包结构,参考以下模板修改(注意替换org.spz为你的实际包名):
module org.spz { // 依赖JavaFX模块 requires javafx.controls; requires javafx.fxml; // 依赖Kotlin标准库 requires kotlin.stdlib; // 依赖JDBC驱动及第三方库 requires com.oracle.database.jdbc; requires mysql.connector.java; requires org.yaml.snakeyaml; // 依赖Java标准库模块 requires java.xml; // 允许JavaFX FXML反射访问控制器所在包(使用FXML必须添加) opens org.spz to javafx.fxml; // 暴露主类所在包,确保启动器能找到主类 exports org.spz; }
3. 完善build.gradle配置
在build.gradle中添加application插件的主类配置(Kotlin项目主类格式为包名.MainKt,对应你的Main.kt文件):
application { mainClass = 'org.spz.MainKt' }
4. 重新执行jlink任务
运行Gradle的jlink任务,此时应该能正常生成包含JavaFX运行时的镜像。
关键说明
requires:声明当前模块依赖的其他模块,需与build.gradle中的依赖一一对应opens:使用FXML时必须打开控制器所在包,否则FXML无法通过反射实例化控制器exports:暴露主类所在包,保证启动器能定位并启动主类
内容的提问来源于stack exchange,提问作者Sc4rocko
相关产品推荐
相关产品推荐

