1

在运行时加载我的 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 文件的类 HotelPackage.HotelMgt 中,我有另一个类(HotelPackage.Hotel)的类变量,它在另一个 jar 文件中。我尝试使用与上面相同的代码打开并加载另一个 jar 文件,但我收到找不到类 def 的 异常。:线程“main”中的异常 java.lang.NoClassDefFoundError: BeanPackage/Hotel

解决办法是什么?

4

2 回答 2

1

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

更多信息在这里:http: //java.sun.com/docs/books/tutorial/deployment/jar/downman.html

于 2009-06-03T08:49:07.360 回答
1

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

于 2009-06-04T02:56:27.303 回答