Java 1.8环境下jdk.nashorn依赖无法解析,如何引入该库?
解决Java 8环境下Nashorn内部类引入问题
核心说明
Java 1.8中Nashorn是JDK内置模块,不需要通过Maven单独引入依赖,你遇到的问题大概率是项目配置或编译参数的问题,以下是具体解决步骤:
1. 确认项目JDK配置正确性
- 打开Eclipse,右键项目 → 属性 → Java Build Path → Libraries:
- 检查是否已添加JDK 1.8.0_231(而非仅JRE),若没有则点击Add Library → JRE System Library选择对应JDK版本。
- 切换到Java Compiler标签页:
- 确保Compiler compliance level设置为1.8,且勾选Use compliance from execution environment on the 'Java Build Path'。
2. 清理Maven中无效的Nashorn依赖
如果你的pom.xml中手动添加了jdk.nashorn相关依赖,直接删除即可——因为该模块属于JDK内置,Maven中央仓库不存在公开的可下载依赖包。
若是依赖传递引入的jdk.nashorn,则在对应的依赖节点中添加排除规则:
<dependency> <!-- 这里是传递引入Nashorn的依赖 --> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <version>xxx</version> <exclusions> <exclusion> <groupId>jdk.nashorn</groupId> <artifactId>jdk.nashorn</artifactId> </exclusion> </exclusions> </dependency>
3. 配置编译参数允许访问内部包
jdk.nashorn.internal.ir.debug属于JDK内部包,Java 8默认限制外部代码访问,需添加编译参数解除限制:
Eclipse中配置
- 右键项目 → 属性 → Java Compiler → Compiler Options → Additional command line parameters:
- 添加参数:
--add-exports jdk.nashorn/jdk.nashorn.internal.ir.debug=ALL-UNNAMED
- 添加参数:
Maven编译配置
在pom.xml的maven-compiler-plugin中添加编译参数:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <compilerArgs> <arg>--add-exports</arg> <arg>jdk.nashorn/jdk.nashorn.internal.ir.debug=ALL-UNNAMED</arg> </compilerArgs> </configuration> </plugin>
4. 生产环境替代方案(推荐)
ObjectSizeCalculator是JDK内部类,官方未承诺API兼容性,生产环境建议替换为公开稳定的工具:
- 使用Apache Commons Lang的
SerializationUtils计算对象大小:import org.apache.commons.lang3.SerializationUtils; long size = SerializationUtils.serialize(modRespList).length; - 或使用Guava的
SizeEstimator:import com.google.common.util.concurrent.SizeEstimator; long size = SizeEstimator.estimate(modRespList);
内容的提问来源于stack exchange,提问作者Baskar
相关产品推荐
相关产品推荐

