2

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

  • 如何声明简单模块(Base)?
  • 如何声明具有(基)模块依赖的模块(主)?
  • 我也想使用(基本)模块与反射。

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

4

1 回答 1

3

拼图快速入门是一个很好的起点,可以帮助您。要回答具体问题:

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

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

module base {
     exports com.test.base;
}

这将导出com.test.base包。


如何声明具有(基)模块依赖的模块(主)?

与其他模块相同,在目录中base命名的类的定义为:module-info.javacom.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
于 2017-09-11T20:19:50.077 回答