実行時に、Javaのクラスパスがきちんと設定されているかどうかを確認するTips

Javaのアプリケーションを実行したときに、エラーで落ちたり、想定していない動き方をすることって、たまにありますよね。

たいていの場合は、Class Not Found Exceptionが出たりしますが、動的にインスタンス化していたりして、そのエラーすら出ない場合もあります。

今回は、Javaのアプリに、クラスパスとして、そのjarが適用されているのかを確認するTipsをご紹介します。

エラーに限らず、以下のような場合にも使えますよ。

  • たくさんのjarが混在している環境で、複数の異なるバージョンのjarが適用されていて、どれが効いているか分からない場合に確認する。
  • どのクラスがどのタイミングでインスタンス化されているかをデバッグする

設定方法

バッチでの起動時

設定方法は、JavaのJVMの引数に「-verbose:class」を指定します。バッチとかでJavaアプリを起動している場合は、

java -verbose:class XXXClass

のような感じですね。(XXXClassは起動するクラス名)

情報はコンソールに表示されるので、ファイルにリダイレクトするほうが良いかもしれません。

Eclipseの起動時に設定

Eclipseをお使いの場合は、「実行の構成」から、「JVM引数」のところに設定して、実行します。

表示される情報

Javaアプリは、実行の際に、必要になったタイミングでクラスをJVMにロードします。ロードはクラスパスとして設定されているパスやjarの中から読み込んで行われますが、このオプションを指定すると、Javaアプリの実行時に、以下のように、ロードしたクラスと、そのクラスが含まれているjarファイルの情報が表示されます。

目的のクラスの名前がなければクラスパスがうまく設定されておらず、ロードできないということですし、バージョンの異なるjarファイルから読み込まれているかどうかも確認できます。