我正在使用web-inf \ lib中的一堆JAR文件将web应用程序部署到weblogic。当我从servlet中的这些jar文件中的类调用许多方法时 - 一切正常。但是我也有一个RMI客户端jar - 当我调用它的一个方法时 - 它给了我ClassNotFoundException
:
Caused By: java.lang.ClassNotFoundException: com.xyz.RMIClientImpl
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:393)
at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:185)
at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:637)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:219)
at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:152)
我不太了解应用程序服务器中的类加载,但是从stacktrace可以清楚地看到一些rmi类加载器正在尝试加载类而不是找到它 - 尽管它在我的web-inf / lib中非常存在
注1:如果我尝试使用Class.forName("com.xyz.RMIClientImpl")
自己加载课程,它工作正常。
所以与类加载和RMI相关的东西 - 如果有人可以解释发生的事情会很棒。
注意2:如果我尝试独立客户端(不是Web应用程序)并调用RMI客户端,则工作正常 - 因此问题仅在部署到应用服务器时(weblogic)
注3:我从我的应用程序的lib文件夹中复制了所有的jar并将它们放在weblogic的库中,然后我没有得到这个异常。是的我知道这不是解决问题的正确方法,但请指出我正确的方向:)
注意4:设置以下内容也没有帮助:
<wls:container-descriptor><wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes></wls:container-descriptor>
试试这个 !您需要显式地将jar添加到类路径中。右键单击项目名称 - >项目属性 - >库和类路径 - >添加jar /目录