Javaのアプリケーションを実行したときに、エラーで落ちたり、想定していない動き方をすることって、たまにありますよね。
たいていの場合は、Class Not Found Exceptionが出たりしますが、動的にインスタンス化していたりして、そのエラーすら出ない場合もあります。
今回は、Javaのアプリに、クラスパスとして、そのjarが適用されているのかを確認するTipsをご紹介します。
エラーに限らず、以下のような場合にも使えますよ。
- たくさんのjarが混在している環境で、複数の異なるバージョンのjarが適用されていて、どれが効いているか分からない場合に確認する。
- どのクラスがどのタイミングでインスタンス化されているかをデバッグする。
目次
設定方法
設定方法は、JavaのJVMの引数に「-verbose:class」を指定します。バッチとかでJavaアプリを起動している場合は、
java -verbose:class XXXClass
のような感じですね。(XXXClassは起動するクラス名)
情報はコンソールに表示されるので、ファイルにリダイレクトするほうが良いかもしれません。
Eclipseをお使いの場合は、「実行の構成」から、「JVM引数」のところに設定して、実行します。
Javaアプリは、実行の際に、必要になったタイミングでクラスをJVMにロードします。ロードはクラスパスとして設定されているパスやjarの中から読み込んで行われますが、このオプションを指定すると、Javaアプリの実行時に、以下のように、ロードしたクラスと、そのクラスが含まれているjarファイルの情報が表示されます。
目的のクラスの名前がなければクラスパスがうまく設定されておらず、ロードできないということですし、バージョンの異なるjarファイルから読み込まれているかどうかも確認できます。