我正在尝试创建一个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不接受任何类型的classpath启动参数,因此我想知道如何告诉它我希望它确认的classpath。根据这里的教程:http://docs.oracle.com/javase/tutorial/rmi/running.html,“您必须确保运行rmiregistry的shell或窗口要么没有设置CLASSPATH环境变量,要么具有不包括任何要下载到远程对象的客户端的类路径的路径的CLASSPATH环境变量。”这听起来与我所需要的相反...还是我理解错误?是否有人成功启动了使用第三方jar(在我的情况下是commons-io,commons-logging和rmiio)的RMI客户端/服务器?
这是在Windows上。更新 我找到了一个解决方法。请见下面的答案。
我最初使用这里的简单教程: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不接受任何类型的classpath启动参数,因此我想知道如何告诉它我希望它确认的classpath。根据这里的教程:http://docs.oracle.com/javase/tutorial/rmi/running.html,“您必须确保运行rmiregistry的shell或窗口要么没有设置CLASSPATH环境变量,要么具有不包括任何要下载到远程对象的客户端的类路径的路径的CLASSPATH环境变量。”这听起来与我所需要的相反...还是我理解错误?是否有人成功启动了使用第三方jar(在我的情况下是commons-io,commons-logging和rmiio)的RMI客户端/服务器?
这是在Windows上。更新 我找到了一个解决方法。请见下面的答案。