我正在尝试制作Java RMI客户端/服务器应用程序.我在启动应用程序的服务器端时遇到问题,因为当我尝试启动应用程序的服务器端时,它在调用Registry.bind()方法期间一直运行到ClassNotFoundException.
我从这里开始使用简单的教程:http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html.按照这些说明操作后,它最初抛出一个ClassNotFoundException,抱怨它无法找到"example.hello.Hello".我能够通过从教程中的destDir目录启动rmiregistry来解决这个问题,因为rmiregistry显然使用其初始起始目录作为其类路径的一部分.
之后我开始使用我的其他测试应用程序,直到我开始在服务器类中使用第三方jar文件时我才感觉良好.现在,如果我的服务器类引用任何jar文件中的任何内容,则Registry.bind()会抛出ClassNotFoundException,因为rmiregistry应用程序不知道这些jar文件.
据我所知,rmiregistry不接受任何类型的路径启动arg,所以我想知道如何告诉它我想要它承认什么类路径.根据这里的教程:http://docs.oracle.com/javase/tutorial/rmi/running.html,"你必须确保你将运行rmiregistry的shell或窗口没有设置CLASSPATH环境变量或有一个CLASSPATH环境变量,它不包含你想要下载到远程对象客户端的任何类的路径." 这听起来与我需要的相反......或者我读错了吗?有没有人有任何成功启动使用第三方jar的RMI客户端/服务器(在我的情况下,commons-io,commons-logging和rmiio)?
这是在Windows上,顺便说一下.
更新
我找到了解决方法.请参阅下面的答案.