JDK1.8升级至JDK11出现jdk.nashorn相关编译错误的问题问询
问题根源
你遇到的报错本质是导入了错误的同名成员,和Gradle Kotlin DSL的源集配置方法冲突导致的,和JDK模块导出无关,也不需要修改JDK的模块导出规则。
具体说明:你要调用的是Gradle Kotlin DSL 中用于配置源目录的source方法,该方法属于项目上下文的原生API,无需额外导入。你错误导入了jdk.nashorn.internal.objects.NativeRegExp.source这个JDK内部废弃API的成员,JDK9+引入的JPMS模块系统禁止访问未导出的内部包,因此触发报错。JDK8没有模块系统限制,所以运行正常。
解决方案
- 方案1:直接删除错误的导入语句
import jdk.nashorn.internal.objects.NativeRegExp.source,删除后直接调用source(sourceSets.map { it.javaDirectories }.flatten())即可正常运行。 - 方案2:如果存在其他同名方法导致调用歧义,可以显式指定调用项目上下文的source方法:
project.source(sourceSets.map { it.javaDirectories }.flatten())
注意事项
绝对不推荐通过JVM参数强制导出jdk.nashorn.internal.objects包解决问题:
- Nashorn脚本引擎从JDK11开始已经被标记为废弃,JDK15及以后版本已经完全移除该模块,强制导出会导致后续JDK版本升级完全不兼容。
jdk.*下的internal包属于JDK内部API,没有对外兼容承诺,随时可能变更,使用风险极高。
内容的提问来源于stack exchange,提问作者jitendra kumar
相关产品推荐
相关产品推荐

