加载一个与另一个jar文件有依赖关系的jar文件的问题

时间:2009-06-03 07:29:46

标签: file jar load runtime dependencies

我在运行时加载我的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

解决方案是什么?

2 个答案:

答案 0 :(得分:1)

您可以通过在JAR的清单文件中定义Class-Path属性来指定JAR之间的依赖关系。然后,JVM将根据需要自动加载依赖项JAR。

更多信息请点击此处:http://java.sun.com/docs/books/tutorial/deployment/jar/downman.html

答案 1 :(得分:1)

谢谢,但我找到了另一个真正有效的解决方案。因为我知道整个组件系列将相互协作,所以我用一个类加载器实例(URL数组)加载它们。然后类加载器本身管理依赖项。