JDK7u21 的发行说明指定了与 RMI 相关的更改:
从这个版本开始,RMI 属性 java.rmi.server.useCodebaseOnly 默认设置为 true。在以前的版本中,默认值为 false。
默认值的这种更改可能会导致基于 RMI 的应用程序意外中断。典型的症状是包含 java.rmi.UnmarshalException 的堆栈跟踪,其中包含嵌套的 java.lang.ClassNotFoundException。
如果发生这些异常,解决问题的首选方法是通过在 java.rmi.server.codebase 系统属性中指定适当的值,将所有 RMI 客户端和服务器配置为使用相同的代码库。这通常通过在启动应用程序的命令中添加 -D 选项来完成:java -Djava.rmi.server.codebase=file:////(path-to-remote-classes)/
它还在此处的文档中指定解决方法是将java.rmi.server.useCodebaseOnly
属性设置回 false。
但是,即使我将此属性显式设置为 false,我也会遇到上述异常。请问这里有什么线索吗?
如果我必须通过上述首选方式解决它(通过设置 -Djava.rmi.server.codebase=file:////(path-to-remote-classes)/,那么我应该设置哪个路径在这里?我的工作区/垃圾箱?