Java 存根的可执行RMI JAR文件ClassNotFoundException

Java 存根的可执行RMI JAR文件ClassNotFoundException,java,jar,rmi,classnotfoundexception,Java,Jar,Rmi,Classnotfoundexception,我有一个正在运行的RMI服务器程序,可以直接从.class文件编译和执行 然而,当我试图为这些程序中的每一个创建JAR文件时,我得到了一个ClassNotFoundException:chaimpl_Stub,在执行时导致了一个RemoteException 我的清单是(加上末尾的空行): 其中chat RMI common是一个JAR文件,包含客户端的聊天界面 我成功地创建了JAR,使用了: jar cvmf ..\MANIFEST.MF chat-RMI-server.jar *.class

我有一个正在运行的RMI服务器程序,可以直接从.class文件编译和执行

然而,当我试图为这些程序中的每一个创建JAR文件时,我得到了一个
ClassNotFoundException:chaimpl_Stub
,在执行时导致了一个
RemoteException

我的清单是(加上末尾的空行):

其中chat RMI common是一个JAR文件,包含客户端的聊天界面

我成功地创建了JAR,使用了:

jar cvmf ..\MANIFEST.MF chat-RMI-server.jar *.class
服务器JAR确实包含chaimpl_存根。但是,当我尝试启动JAR文件时,会出现异常:

java -Djava.rmi.server.codebase="file:chat-RMI-common.jar file:chat-RMI-server.jar"
    -Djava.security.policy=..\security.policy
    -jar chat-RMI-server.jar
调用涉及ChatImpl的
Naming.rebind
函数时(在程序开始时)会出现异常

我的安全政策:

grant {
    permission java.security.AllPermission;
}

我还忘了什么?提前感谢您的时间。

仔细查看堆栈跟踪。注册表找不到该类。它需要位于注册表的类路径上。因此,您要么需要在注册表的类路径上使用正确的JAR启动注册表,要么最好在服务器JVM中使用LocateRegistry.createRegistry()。

它现在可以工作了,我选择了惰性选项(createRegistry()),谢谢。你知道如何在清单中嵌入java.codebase和java.security.policy选项,而不是使用脚本来运行JAR吗?附言:我会接受你的回答,只想在之前尝试一两件事;)您不能将这些内容嵌入到清单中,但可以在main()中将它们设置为系统属性。您可以研究使用JWS,它允许您将系统属性嵌入到XML文件中class@fanky除了你以外的任何人怎么可能知道你的JAR文件中有什么?这个问题很可笑。
grant {
    permission java.security.AllPermission;
}