gpt4 book ai didi

Java RMI 和 NoClassDefFoundError

转载 作者:行者123 更新时间:2023-12-02 07:43:22 24 4
gpt4 key购买 nike

更新:Here是项目。

我有以下目录结构:

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 文件中相同的三个类,即使我将类路径设置为 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 list 中的 Class-Path 选项将 client.jar 连接到 api.jar。

关于Java RMI 和 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11277760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com