如何在java 9中声明模块

时间:2017-09-11 19:43:48

标签: java java-9 java-module

我想在我的项目中使用java 9模块。我想将我的数据和服务类(在名为com.test.base的包中)放在一个名为(Base)的模块中,并将其他类似主类和GUI(在名为com.test.main的包中)放在另一个名为com.test的模块中(主)。

  • 如何申报简单模块(Base)?
  • 如何使用(Base)模块的依赖声明模块(Main)?
  • 我也想使用带反射的(基础)模块。

  • 假设我的根包是intragovAnalitico那么我应该为这些模块使用哪种目录结构?

1 个答案:

答案 0 :(得分:3)

jigsaw quick-start是一个很好的起点,可以帮助你。回答具体问题:

  

如何声明简单模块(Base)?

module-info.java目录中创建一个名为com.test.base的类,其定义为:

module base {
     exports com.test.base;
}

这将导出com.test.base包。

  

如何使用(Base)模块的依赖声明模块(Main)?

与其他模块basemodule-info.java目录中名为com.test.main的类相同,定义为:

module main {
    requires base;
}

使用导出的包。

  

我也想使用带有反射的(基础)模块。

根据yoru的使用情况,如果删除了API,或者按照列出的here进行了更改,那么您可以使用JEP-261

中详述的--add-exports java选项

我还建议阅读Nicolai's answerHow 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