刚接触jdk 11的模块系统,那么怎么处理module-info.java呢?

我有一个老的SpringBoot项目,现在跑在jdk11上,能正常运行,但是在项目启动时会报错如下:

java.lang.UnsupportedOperationException: Reflective setAccessible(true) disabled

java.lang.IllegalAccessException: class io.netty.util.internal.PlatformDependent0$6 
cannot access class jdk.internal.misc.Unsafe (in module java.base) 
because module java.base does not export jdk.internal.misc to unnamed module @5fe6ab15

发现是某些模块在jdk11被剥离开来了,需要手动导入,或者某些内部类和不可读类也要显式申明才能使用。
stackoverflow发现可以使用module-info.java来解决
那么问题来了,现在我创建一个module-info.java文件,所有的模块都需要自己requires或者open吗?就算我自己知道需要导入哪些(而且我还不知道要导入哪些),但也太多了,很不友好,各位有什么好办法吗?

项目配置:
SpringBoot: 2.1.1.RELEASE
Gradle: 5.1.1
Jdk: 11

阅读 21.1k
2 个回答
  • 要使用module-info.java的话,估计就要整个都改造支持JPMS。
  • because module java.base does not export jdk.internal.misc to unnamed module看这个报错,把jdk.internal.misc这个open给unnamed module就可以,可以在maven compiler plugin里头添加compilerArgs参数
<compilerArgs>
    <arg>-J--add-opens=java.base/jdk.internal.misc=ALL-UNNAMED</arg>        
</compilerArgs>

楼主,解决了吗 jdk12 我也遇到这个问题了,咋解决啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题