我想在我的项目中使用java 9模块。我想将我的数据和服务类(在名为com.test.base
的包中)放在一个名为(Base)的模块中,并将其他类似主类和GUI(在名为com.test.main
的包中)放在另一个名为com.test
的模块中(主)。
我也想使用带反射的(基础)模块。
假设我的根包是intragovAnalitico
那么我应该为这些模块使用哪种目录结构?
答案 0 :(得分:3)
jigsaw quick-start是一个很好的起点,可以帮助你。回答具体问题:
如何声明简单模块(Base)?
在module-info.java
目录中创建一个名为com.test.base
的类,其定义为:
module base {
exports com.test.base;
}
这将导出com.test.base
包。
如何使用(Base)模块的依赖声明模块(Main)?
与其他模块base
在module-info.java
目录中名为com.test.main
的类相同,定义为:
module main {
requires base;
}
使用导出的包。
我也想使用带有反射的(基础)模块。
根据yoru的使用情况,如果删除了API,或者按照列出的here进行了更改,那么您可以使用JEP-261
中详述的--add-exports
java选项
我还建议阅读Nicolai's answer到How to solve InaccessibleObjectException ("Unable to make {member} accessible: module {A} does not 'opens {package}' to {B}") on Java 9?,以获得有关如何在Java-9中使用反射的一个很好的解释。
正确的解决方法是按如下方式启动JVM:
--add-opens has the following syntax: {A}/{package}={B} java --add-opens java.base/java.lang=ALL-UNNAMED
如果反映代码在命名模块中,则ALL-UNNAMED可以用其名称替换。
假设我的root包是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