0

我的 NetBeans 窗口中有两个项目

MyProject
  Tester.java
Utilities
  Utils.java

Utils.java文件包含许多其他人编写的静态方法,我们可以重复使用。最近我添加了一组新的静态方法来Utils.java使用新的外部 jar。我通过将库添加到Utilities项目中Properties --> Libraries --> Add Library

然后我继续从内部调用这些方法,Tester.java但收到java.lang.NoClassDefFoundError了在这些外部库中定义的类的异常。当我从项目中调用方法时,不会发生这种情况Utilities

我也通过将所需的库添加到MyProject项目中来解决了这个问题,但是我必须这样做有什么原因吗?

4

2 回答 2

1

您还需要在 MyProject 中拥有外部库,因为它可传递地依赖于这些库。您收到 java.lang.NoClassDefFoundError 是因为在编译时所需的类可用于 Utilities 以构建 jar,但这些类在运行时丢失。

于 2013-07-12T16:48:38.917 回答
1

原因很简单:Utils.class依赖库中的类来工作。所以如果类路径中没有库的类,Utils.class就无法工作。就像只有一个加速器不足以让汽车移动一样。没有汽车发动机,油门就无法工作。你作为一个司机,不要直接弄乱引擎,而只是通过加速器,这并不意味着引擎不是必需的。(对不起这个汽​​车类比,但希望它能让事情更清楚)。

于 2013-07-12T16:50:43.800 回答