项目 A 依赖于项目 B。
在编译时,一切正常。
在调试时,当调用项目 B 的 bClass 类的静态函数时,我得到 NoClassDefFoundError。
在运行时,我得到 ExceptionInInitializerError。
此外,bClass 有一个静态初始化程序,当我在那里设置断点时,它永远不会到达它——这对我来说似乎很奇怪,但也很有意义,因为可能找不到该类。
知道如何解决吗?据我所知,我已经检查了所有依赖项。
项目 A 依赖于项目 B。
在编译时,一切正常。
在调试时,当调用项目 B 的 bClass 类的静态函数时,我得到 NoClassDefFoundError。
在运行时,我得到 ExceptionInInitializerError。
此外,bClass 有一个静态初始化程序,当我在那里设置断点时,它永远不会到达它——这对我来说似乎很奇怪,但也很有意义,因为可能找不到该类。
知道如何解决吗?据我所知,我已经检查了所有依赖项。
在 NoClassDefFound 异常的情况下,根据编译时类路径仔细检查您的运行时类路径。Eclipse 通常使用运行时 CP 的编译时类路径,但如果您修改了默认启动配置,它们可能不再匹配。
我经常发现,如果静态初始化程序抛出异常,那么您会得到这些令人困惑和误导的结果。试试这个:在静态初始化程序中的所有代码周围放置一个 try/catch 语句,并在 catch 块中记录异常(在错误日志中或控制台中)。如果抛出异常,这将帮助您缩小范围。
static {
try {
// ... your code here ...
} catch (Throwable t) {
t.printStackTrace();
}
}
当你完成调试后,你应该删除这个 try/catch 子句,因为它吞下了异常。