2017-09-11 41 views
1

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

  • 如何声明简单模块(Base)?
  • 如何用(Base)模块的依赖声明模块(Main)?
  • 我也想使用(基地)模块与反思。

  • 假设我的根包是com.test那么我应该在这些模块中使用什么目录结构?

+4

你**阅读文件**?如果是这样,哪个部分让你感到困惑?如果不是,为什么不呢? StackOverflow不是教学网站。 – Andreas

回答

3

jigsaw quick-start是一个很好的开始与这帮助你。回答具体问题:

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

module base { 
    exports com.test.base; 
} 

这导出com.test.base包:

与定义com.test.base目录中创建一个名为module-info.java类。


如何申报与(基地)模块的依赖性模块(主)?

同其他模块base一个com.test.main目录中名为module-info.java与定义类:

module main { 
    requires com.test.base; 
} 

利用导出的包。


我也想用(基地)模块与反思。

取决于夜使用,如果API OS去除或改变上市here,那么你可以使用--add-exports java选项作为JEP-261

我还建议阅读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 

如果反射代码是一个名为模块中,所有命名的可以通过它的名称所取代。


假设我的根包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