我在运行时加载我的jar文件时遇到问题。 我的hotel.jar已加载,并使用以下代码调用它的方法(makeReservation):
File file = new File("c:/ComponentFiles/hotel.jar");
URL jarfile = new URL("jar", "", "file:" + file.getAbsolutePath() + "!/");
URLClassLoader cl = URLClassLoader.newInstance(new URL[]{jarfile});
Class componentClass = cl.loadClass("HotelPackage.HotelMgt");
Object componentObject = componentClass.newInstance();
Method setMethod = componentClass.getDeclaredMethod("makeReservation", null);
setMethod.invoke(componentObject, null);
问题出在我的jar文件的ClassPackage.HotelMgt类中,我有另一个类(HotelPackage.Hotel)的类变量,它位于另一个jar文件中。 我尝试使用与上面相同的代码打开并加载其他jar文件,但是我收到了无法找到类def的异常: 线程“main”中的异常java.lang.NoClassDefFoundError:BeanPackage / Hotel
解决方案是什么?
答案 0 :(得分:1)
您可以通过在JAR的清单文件中定义Class-Path属性来指定JAR之间的依赖关系。然后,JVM将根据需要自动加载依赖项JAR。
更多信息请点击此处:http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html
答案 1 :(得分:1)
谢谢,但我找到了另一个真正有效的解决方案。因为我知道整个组件系列将相互协作,所以我用一个类加载器实例(URL数组)加载它们。然后类加载器本身管理依赖项。