sun.rmi.server和sun.rmi.transport - Java 10不支持jdk内部API

时间:2018-06-12 11:18:48

标签: java rmi java-10 java-11

我目前正在使用Java 8并希望迁移到Java 11。

Java 10中不支持下面列出的jdeps -P -jdkinternals ...命令。

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))";
}

感谢。

1 个答案:

答案 0 :(得分:0)

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 ... *程序包,无需进行任何 警告 即可访问它们,如下所示:< / p>

javac --add -exports jdk.management.agent/jdk.internal.agent=ALL-UNNAMED HelloWorld.java  

注意:该问题与是否在应用程序代码中直接使用内部API无关。早在15年前,就有使用内部API开发的软件产品,它们仍然存在于Java 8中。