java模块化五个重要的命令

java mods
java模块系统的五个关键指令

--add-exports 访问内部API

如果旧代码迁移到JDK9+, 编译报package x.x.x is not visible 的错误时,是因为旧代码访问了模块的内部API;为了能够访问内部API,需要在编译时加上
--add-exports java.xx/x.x.x=ALL-UNNAMED

--add-open 反射访问内部API

但是,这种方式只是在编译期起作用;那些在x在运行时才知道访问了内部API的问题需要新的方式解决; 错误异常通常是 java.lang.reflect.InaccessibleObjectException..
解决方式是运行时加上
--add-opens x.x/x.x.x=All-UNNAMED
特别时那些通过反射调用的类和方法;

--add-modules 添加依赖模块

如,项目依赖Java EE的相关xml代码, 编译和运行时就需要添加对应的模块
javac --add-moudles java.xml.bind

--patch-modules指定到特定模块

当迁移过程中讨论拆包装,我们看到了一个使用注释的项目的例子 @ 生成(从java.xml.ws.annotation模块)和 @ 非空(从JSR 305实现)。我们发现了三件事:

  • 两个注释都在 javax .annotation包中,因此创建了一个分割
  • 我们需要手动添加模块,因为它是一个Java EE模块
  • 这样做会使拆分包的JSR 305部分不可见
    我们可以使用 --patch-module来修补分割:
java
    --add-modules java.xml.ws.annotation
    --patch-module java.xml.ws.annotation=jsr305-3.0.2.jar
    --class-path $dependencies
    -jar $appjar
--add-reads 模块读取另一个模块

五个重要的命令

你可能感兴趣的:(java模块化五个重要的命令)