【问题标题】:problem with loading a jar file which has dependency to another jar file加载依赖于另一个 jar 文件的 jar 文件时出现问题
【发布时间】:2010-10-30 22:04:08
【问题描述】:

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

解决办法是什么?

【问题讨论】:

    标签: file jar load runtime dependencies


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 在这种情况下,您可能希望将所有 jar 放入一个主 jar - 所以这个项目对您来说可能很有趣:one-jar.sourceforge.net
      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 2015-10-16
      相关资源
      最近更新 更多