JavaMailでClassNotFoundExceptionが起こったときは依存関係を疑う
JavaのバッチでJavaMailを使用してメール送信する処理を作成していたら、ClassNotFoundExceptionが起きたので、その時の原因と解決法をまとめる。
原因
原因は単純で読み込むライブラリを間違えていました。
元々はGradleのdependenciesに以下のように書いて、ライブラリを読み込んでいました。
compile group: 'javax.mail', name: 'javax.mail-api', version: '1.6.2'
これで、落ちてくるライブラリは以下のみになります。
javax.mail-api-1.6.2.jar
このライブラリに含まれるクラスは「javax.mail~」に関連するクラスだけになり、メールを送るときにクラス足りなくて怒られる、、、(maven repositoryのdependecyには何も書かれてないが)
改善
以下のように読み込むJavaMailのライブラリを変えます。
compile group: 'com.sun.mail', name: 'javax.mail', version: '1.6.2'
これで落ちてくるライブラリは以下の2つになります。
javax.mail-1.6.2.jar
activation-1.1.jar
この「javax.mail」ライブラリに含まれるクラスは「javax.mail~」関連のクラスと「com.sun.mail~」関連クラスになります。
このライブラリを使用するとClassNotFoundException関連のエラーがすっきりしました。
まとめ
java mail関連のライブラリは似たようなグループ構成でけっこう戸惑ってしまいます。
けっこう動きそうなパッケージ名しているし、すごくわかりにくい、、、