java - sun.rmi.server 和 sun.rmi.transport - Java 10 不支持 jdk 内部 API
问题描述
我目前正在使用 Java 8 并希望迁移到 Java 11。
jdeps -P -jdkinternals ...
Java 10 不支持下面列出的命令。
sun.rmi.server.UnicastRef
sun.rmi.server.UnicastRef2
sun.rmi.transport.Endpoint
sun.rmi.transport.LiveRef
sun.rmi.transport.tcp.TCPEndpoint
有人可以帮我寻找上述课程的替代品吗?
JDK 11 中 JDEPS 的输出:
digraph "AppCore.jar" {
// Path: D:\jdeps\srclib\AppCore.jar
"com.util.RMIServer" -> "sun.rmi.server.UnicastRef (JDK internal API (java.rmi))";
"com.util.RMIServer" -> "sun.rmi.server.UnicastRef2 (JDK internal API (java.rmi))";
"com.util.RMIServer" -> "sun.rmi.transport.Endpoint (JDK internal API (java.rmi))";
"com.util.RMIServer" -> "sun.rmi.transport.LiveRef (JDK internal API (java.rmi))";
"com.util.RMIServer" -> "sun.rmi.transport.tcp.TCPEndpoint (JDK internal API (java.rmi))";
"com.util.WrappedPostlessSocket" -> "sun.rmi.transport.proxy.RMISocketInfo (JDK internal API (JDK removed internal API))";
}
谢谢。
解决方案
JDK 11 允许我们通过在项目中导出模块来使用少量内部 API,并带有如下 警告:
warning: UnicastRef is internal proprietary API and may be removed in a future release.
警告清楚地说明了将要发生的事情。
命令:
javac --add-exports java.rmi/sun.rmi.server=ALL-UNNAMED RMIServer.java
Where, java.rmi -> is a module name,
sun.rmi.server -> is the package name,
RMIServer.java -> Class in which package sun.rmi.server is imported.
在 java 9 中,很少有其他内部 API 被移动到 jdk.internal...* 包中,可以在没有任何警告的情况下访问它们,如下所示:
javac --add -exports jdk.management.agent/jdk.internal.agent=ALL-UNNAMED HelloWorld.java
注意:这个问题与是否直接在您的应用程序代码中使用内部 API 无关。因为有 15 多年前使用内部 API 开发的软件产品,它们仍然存在于 java 8 中。
推荐阅读
- node.js - 如何从命令行将自定义变量传递给 pm2
- playwright - 如何更改启动“npx folio”的目录
- docker - 通过 docker 镜像访问 SMB 共享还是通过 docker 主机连接到 SMB 共享?
- typescript - 拒绝显示框架,因为它在 IOS 平台上的 ionic 应用程序中将“X-Frame-Options”设置为“DENY”
- android - 在 Android 中用 ARCore 替换白点或放置自定义图像
- mysql - 如果 DOB 列是加密的,我将如何计算 MySQL 中每个人的年龄
- azure - docker 检查 az cli 中的已杀死容器
- python - 在 def 函数中使用 input()
- python - 在机器人框架的变量部分动态设置变量
- c# - Blazor 从子组件传递和运行任务 - 无法从“方法组”转换为“任务”
'