java.lang.NoClassDefFoundError: 无法初始化类 XXX

新手上路,请多包涵
public class PropHolder {
  public static Properties prop;

  static {
    //code for loading properties from file
  }
}

// Referencing the class somewhere else:
Properties prop = PropHolder.prop;

class PropHolder 是我自己的一个类。该类驻留在主类的同一个 JAR 文件中。所以这不应该是因为类路径中缺少任何 JAR。

当我通过 jar tf myjarfile 查看 JAR 文件时,我可以看到 PropHolder.class 列在那里。

顺便说一句:代码在我的本地机器上运行良好。但是当我用一些脚本将它部署到 Linux 服务器上时无法工作。所以我认为这不是代码的问题。但出于某种原因。部署过程很难跟踪。

可能是什么问题呢?

原文由 Leon 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
2 个回答

我最好的选择是这里有一个问题:

 static {
    //code for loading properties from file
}

似乎发生了一些未捕获的异常并传播到尝试加载该类的实际 ClassLoader。不过,我们需要一个堆栈跟踪来确认这一点。

在创建 PropHolder.prop 静态变量时发生。

原文由 John Vint 发布,翻译遵循 CC BY-SA 3.0 许可协议

你得到一个 java.lang.NoClassDefFoundError 这并不意味着你的班级不见了(在那种情况下你会得到一个 java.lang.ClassNotFoundException )。 ClassLoader 在尝试读取类时读取类定义时遇到错误。

在静态初始化器中放置一个 try/catch 并查看异常。如果您在那里阅读了一些文件并且它与您的本地环境不同,则很可能是问题的原因(可能找不到文件,没有权限等)。

原文由 jeha 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题