我想在我的项目中使用 java 9 模块。我想将我的数据和服务类(在名为 的包com.test.base
中)放在一个名为(Base)的模块中,并将其他东西(如主类和 GUI(在名为的包com.test.main
中))放在另一个名为(Main)的模块中。
- 如何声明简单模块(Base)?
- 如何声明具有(基)模块依赖的模块(主)?
我也想使用(基本)模块与反射。
假设我的根包是
com.test
我应该为这些模块使用什么目录结构?
我想在我的项目中使用 java 9 模块。我想将我的数据和服务类(在名为 的包com.test.base
中)放在一个名为(Base)的模块中,并将其他东西(如主类和 GUI(在名为的包com.test.main
中))放在另一个名为(Main)的模块中。
我也想使用(基本)模块与反射。
假设我的根包是com.test
我应该为这些模块使用什么目录结构?
拼图快速入门是一个很好的起点,可以帮助您。要回答具体问题:
如何声明简单模块(Base)?
module-info.java
在目录中创建一个名为的类com.test.base
,其定义为:
module base {
exports com.test.base;
}
这将导出com.test.base
包。
如何声明具有(基)模块依赖的模块(主)?
与其他模块相同,在目录中base
命名的类的定义为:module-info.java
com.test.main
module main {
requires base;
}
使用导出的包。
我也想使用(基本)模块与反射。
根据 yoru 的使用情况,如果 API 操作系统被删除或更改为此处列出的,那么您可以使用JEP-261--add-exports
中详述的 java 选项
我还建议阅读Nicolai对如何在 Java 9 上解决 InaccessibleObjectException(“无法使 {member} 可访问:模块 {A} 不会‘打开 {package}’到 {B}”)的回答?关于如何在 Java-9 中使用反射的一个很好的解释。
正确的解决方法是按如下方式启动 JVM:
--add-opens has the following syntax: {A}/{package}={B} java --add-opens java.base/java.lang=ALL-UNNAMED
如果反射代码在命名模块中,则 ALL-UNNAMED 可以替换为其名称。
假设我的根包是 com.test 那么我应该为这些模块使用什么目录结构?
你的目录结构应该有点像:
src/main/java
- com.test
- base
- module-info.java
- com/test/base/Main.java
- main
- module-info.java
- com/test/main/SimpleClass.java