OpenJDK 21+Eclipse中无法导入com.sun.tools.javac.util.Pair求助
解决com.sun.tools.javac.util.Pair无法访问的问题
问题原因
com.sun.tools.javac.util.Pair是JDK的内部API,不属于公开标准API。从Java 9引入模块化系统后,JDK默认禁止直接访问这类内部类,所以你会收到"The type com.sun.tools.javac.util.Pair is not accessible"的错误。
推荐解决方案:使用标准库替代类
不建议依赖内部API(后续JDK版本可能移除或修改),优先选择Java标准库中的键值对实现:
- Java 8+:使用
java.util.AbstractMap.SimpleEntry,支持可变的键值对:import java.util.AbstractMap; import java.util.Map; public class Test { public static void main(String[] args) { Map.Entry<String, Integer> pair = new AbstractMap.SimpleEntry<>("key", 123); System.out.println(pair.getKey() + ": " + pair.getValue()); } } - Java 16+:使用
java.util.Map.Entry.of()创建不可变键值对,更简洁:import java.util.Map; public class Test { public static void main(String[] args) { Map.Entry<String, Integer> pair = Map.Entry.of("key", 123); System.out.println(pair.getKey() + ": " + pair.getValue()); } }
非要使用内部API的临时解决办法(不推荐)
如果因为特殊需求必须用com.sun.tools.javac.util.Pair,需要在Eclipse和编译参数中配置访问权限:
- Eclipse项目配置:
- 右键项目 → 「Properties」→ 「Java Build Path」→ 「Libraries」
- 展开你的OpenJDK 21 → 选择「Access rules」→ 点击「Edit」
- 添加规则:Resolution选「Accessible」,Pattern填
com/sun/tools/javac/util/**,点击「OK」保存
- 编译参数配置:
- 在Eclipse中,右键项目 → 「Properties」→ 「Java Compiler」→ 找到「Command line arguments」
- 添加编译参数:
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
内容的提问来源于stack exchange,提问作者Suga
相关产品推荐
相关产品推荐

