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

2022-08-31 06:06:19
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 文件时,我可以看到那里列出的。jar tf myjarfilePropHolder.class

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

可能是什么问题?


答案 1

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

static {
    //code for loading properties from file
}

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

要么是这样,要么是在创建静态变量时发生的。PropHolder.prop


答案 2

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

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


推荐