java.lang.NoClassDefFoundError: Could not initialize classの原因究明

2019年12月30日

以下のエラーが発生した。

java.lang.NoClassDefFoundError: Could not initialize class ....

エラー内容としては「クラスが見つからない」と言っているのだが、しかしその説明としては「クラスの初期化ができなかった」となっている。当然だが、クラスは存在し、初期化ができないだけのようだ。

このエラーが厄介なのは、共に表示されるスタックトレースには問題の根源が全く示されていないこと。このスタックトレースを見ても何が悪いのかさっぱりわからない。

唯一解決した方法としては、このクラスAのすべてのstaticフィールドの初期化の例外を捕まえることだけだった。例えば、以下になっているとすると、

class A {
  static Something SOMETHING = ....
}

以下に変更する。

class A {
  static Something SOMETHING;
  static {
    try {
      SOMETHING = ....
    } catch (Throwable th) {
      th.printStackTrace();
    }
  }
}

これでとりあえずは原因がわかった。

参考