问题
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服务器上时无法工作。所以我认为这不是代码的问题。但出于某种原因。部署过程很难跟踪。
可能是什么问题呢?
#1 热门回答(150 赞)
我最好的选择是这里有一个问题:
static {
//code for loading properties from file
}
它会出现一些未捕获的异常,并传播到试图加载该类的实际ClassLoader。我们需要一个堆栈跟踪来确认这一点。
创建PropHolder.prop
static变量时发生的那种情况。
#2 热门回答(92 赞)
你得到的是ajava.lang.NoClassDefFoundError
,这并不意味着你的班级丢失了(在这种情况下你得到ajava.lang.ClassNotFoundException
)。尝试读取类时,ClassLoader在读取类定义时遇到错误。
在你的静态初始化程序中放置一个try / catch并查看异常。如果你在那里阅读了一些文件并且它与你的本地环境不同,则很可能是问题的原因(可能找不到文件,没有权限等)。
#3 热门回答(24 赞)
NoClassDefFoundError没有提供关于静态块内部出错的线索。在静态初始化代码中始终有这样的块是一个好习惯:
static {
try {
... your init code here
} catch (Throwable t) {
LOG.error("Failure during static initialization", t);
throw t;
}
}