参考文档:https://www.cnblogs.com/IcanFixIt/p/7144366.html
在使用 eclipse (支持 jdk9 及以后版本的 eclipse)引入 sun.net 包时,会出现编译错误,提示 “The type xxx is not accessible” 的错误信息。
在网上搜索了很多的文章,都是提示在 Properties 对话框中修改 "JRE System Library" 的 "Access rules" 来实现。这里描述一下网上资料中描写的操作过程。在Properties 对话框中左侧选择 "Java Build Path" 项目,在右侧的 Libraries 页签中选择 "JRE System Library",展开折叠,选择 "Access rules" 项添加操作规则。在 “Add Access Rule” 对话框中,Resolution 选择 "Accessible",在 Rule Pattern 中输入 sun.net.www.protocol.http/**,再选择 OK 按钮确认配置。
同时设置 Properties 对话框中的 Java Compiler-->Errors/Warnings 中,将 Deprecated and restricted API 中所有的告警方式改为 "Warning"。
这种方法我在 eclipse 中测试了是没有效果的,编译仍然报同样的错误。
通过不断尝试,探索出了可以解决这个问题的方法。解决这个问题也是需要通过 Properties 界面中的 “Expose Package” 的设置实现。
首先需要确定编译报错的 import 类属于 jdk 模块中的哪个包?如下图:
上图中引入的三个类分别属于:
sun.net.www.HeaderParser 属性 sun.net.www 包
sun.net.www.protocol.http.AuthScheme 和 sun.net.www.protocol.http.AuthenticationInfo 同属于 sun.net.www.protocol.http 包。
因此在操作时需要对这两个包执行 Expose Package 操作。
按上面的图示打开 Add-exports configuration 对话框,根据前面找到的包路径,在 Package 栏中输入包路径,在 Target module 中输入目标模块名,设置为未命名模块 "ALL-UNNAMED",这样在类中就能直接访问和导入这些模块了。