Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RMI和NoClassDefFoundError_Java_Classpath_Rmi - Fatal编程技术网

Java RMI和NoClassDefFoundError

Java RMI和NoClassDefFoundError,java,classpath,rmi,Java,Classpath,Rmi,更新:是项目 我有以下目录结构: RMI | api.jar |--> org.examples.rmi.api.Pi |--> org.examples.rmi.api.Task |--> org.examples.rmi.api.Compute client.jar |--> org.examples.rmi.client.ComputePi server.jar |--&

更新:是项目

我有以下目录结构:

RMI
  |
  api.jar
        |--> org.examples.rmi.api.Pi
        |--> org.examples.rmi.api.Task
        |--> org.examples.rmi.api.Compute
  client.jar
        |--> org.examples.rmi.client.ComputePi
  server.jar
        |--> org.examples.rmi.server.ComputeEngine
        |--> org.examples.rmi.api.Pi
        |--> org.examples.rmi.api.Task
        |--> org.examples.rmi.api.Compute
我键入以下命令以启动服务器:

C:\Users\Public\RMI\server>set CLASSPATH=
C:\Users\Public\RMI\server>start rmiregistry
C:\Users\Public\RMI\server>java -Djava.rmi.server.codebase="file:/C:/Users/Public/RMI/compute.jar" -Djava.rmi.server.hostname=127.0.0.1 -Djava.security.policy=server.policy org.examples.rmi.engine.ComputeEngine
然后我键入以下命令以启动我的客户端:

C:\Users\Public\RMI>java -cp api.jar -jar -Djava.rmi.server.codebase="file:/C:/Users/Public/RMI/api.jar" -Djava.security.policy=client.policy client.jar 127.0.0.1 45
但我得到了以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: org/examples/rmi/api/Task
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
        at java.lang.Class.getMethod0(Unknown Source)
        at java.lang.Class.getMethod(Unknown Source)
        at sun.launcher.LauncherHelper.getMainMethod(Unknown Source)
        at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: org.examples.rmi.api.Task
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 6 more
但是,如果我将api包中的三个类添加到client.jar文件中,客户机就会工作

如果删除server.jar文件中相同的三个类,即使将classpath设置为api.jar,也会得到相同的NoClassDefFoundError

C:\Users\Public\RMI>java -cp api.jar -jar -Djava.rmi.server.hostname=127.0.0.1 -Djava.rmi.server.codebase="file:/C:/Users/Public/RMI/api.jar" -Djava.security.policy=server.policy server.jar
我不想把这三个类放在api包的多个地方。我只想把它们放在一个地方,在api.jar文件中。我是否没有在命令行上正确设置类路径


非常感谢你的建议。谢谢

使用-jar选项时,将忽略-cp参数。您应该使用client.jar清单中的Class Path选项将client.jar连接到api.jar。

您能告诉我如何提供该项目吗?也许需要一个zip来检查它们?当然,这是zip文件:。我还包括了源代码。
C:\Users\Public\RMI>java -cp api.jar -jar -Djava.rmi.server.hostname=127.0.0.1 -Djava.rmi.server.codebase="file:/C:/Users/Public/RMI/api.jar" -Djava.security.policy=server.policy server.jar