javaFx 下的模块系统
Java 9 fx引入的模块化系统中的一个文件,java8版本还没,开始不知道的容易被坑。模块系统用于定义和配置模块。模块化系统的目的是将代码分解为更小的单元(模块),以便更好地组织、管理和重用代码。module-info.java
文件包含了模块的元数据信息,以及模块对其他模块的依赖关系。
简而言之,就是代码分解为小的模块,并管理模块间相互访问的权限。
module-info.java
文件可以包含以下内容:
模块的名称:使用module
关键字定义模块的名称,如model 模块名{……}
模块的依赖关系:使用requires
关键字定义模块对其他模块的依赖关系。
模块的导出包:使用exports
关键字定义模块中需要对外部模块公开的包。
模块的开放包:使用opens
关键字定义模块中需要对外部模块开放的包(用于反射)。
模块的使用服务:使用uses
关键字定义模块使用的服务接口。
模块的提供服务:使用provides
关键字定义模块提供的服务接口。
下面是一个简单的module-info.java
文件的示例:
module com.example.jfxtest01 {
requires javafx.controls;
requires javafx.fxml;
exports com.example.Data;
opens com.example.jfxtest01 to javafx.fxml;
exports com.example.jfxtest01;
}
requires javafx.controls;
requires javafx.fxml;
表示该模块依赖于JavaFX的controls
模块、fxml
模块。javafx项目必有这两个
exports com.example.Data; //这是我当前模块下的一个自己建的包
这一行表示模块将com.example.Data
包公开给其他所有模块。
比如我希望我的com.example.Data下
的代码能让其他部分的模块代码能访问到我就加上这个。
如果不加就会报:
java.lang.RuntimeException: java.lang.IllegalAccessException: module javafx.base cannot access class com.example.Data.TabData
Caused by: java.lang.IllegalAccessException: module javafx.base cannot access class com.example.Data.TabData
opens com.example.jfxtest01 to javafx.fxml; //
将com.example.jfxtest01
包公开给javafx.fxml
模块。
exports com.example.jfxtest01; //
表示模块将整个com.example.jfxtest01
模块公开给其他所有模块。
javafx项目必有这