「JavaMail」を使用するためMavenリポジトリを確認したところ、似たような選択肢として以下に記載する4つがありました。
- JavaMail:https://mvnrepository.com/artifact/javamail/javamail
- JavaMail API (compat):https://mvnrepository.com/artifact/javax.mail/mail
- JavaMail API JAR:https://mvnrepository.com/artifact/javax.mail/javax.mail-api
- JavaMail API:https://mvnrepository.com/artifact/com.sun.mail/javax.mail
結果的に「4.」を選択することになりますが、それぞれの違いについてなどの説明を記載していきます。
JavaMail
Mavenリポジトリ:https://mvnrepository.com/artifact/javamail/javamail
Mavenリポジトリを表示すると以下の情報が表示されていると思います。
Note: This artifact was moved to:
https://mvnrepository.com/artifact/javamail/javamail
javax.mail » mail
このライブラリは別へ移動したことを示しています。新しく依存性解決に追加する場合は、指定されているライブラリを使用するようにします。このため、このライブラリを選択することはなくなります。
JavaMail API (compat)
Mavenリポジトリ:https://mvnrepository.com/artifact/javax.mail/mail
Mavenリポジトリを表示すると以下の情報が表示されていると思います。
Note: This artifact was moved to:
https://mvnrepository.com/artifact/javax.mail/mail
javax.mail » javax.mail-api
このライブラリは別へ移動したことを示しています。新しく依存性解決に追加する場合は、指定されているライブラリを使用するようにします。このため、このライブラリを選択することはなくなります。
JavaMail API JAR
Mavenリポジトリ:https://mvnrepository.com/artifact/javax.mail/javax.mail-api
Mavenリポジトリを確認すると定期的に更新されています。2019年6月の時点では、最新バージョンが以下のようになっています。
- バージョン:1.6.2
- リリース日:2019年8月
このライブラリの詳細を確認するとCompile Dependencies(コンパイル時の依存性関係)もないため、このライブラリだけで動作するように思えます。
ところが、JavaMailでメッセージ作成するため「javax.mail.Session」インスタンスを作成する時に以下の例外が発生します。
java.lang.NoClassDefFoundError: com/sun/mail/util/MailLogger
この例外は、クラスが存在しない場合に発生する例外になります。依存性関係の記載はないですが、実行時は例外となる問題が発生します。
依存性関係に「com.sum.mail」を追加することで問題を解決することができます。ただし、次に説明する「JavaMail API」では、1つの依存性関係を追加するだけでJavaMailを使用できるようになります。依存性関係を減らすことを考えた場合は、このライブラリを使用する必要性へ減ると考えられます。
JavaMail API
Mavenリポジトリ:https://mvnrepository.com/artifact/com.sun.mail/javax.mail
Mavenリポジトリを確認すると定期的に更新されています。2019年6月の時点では、最新バージョンが以下のようになっています。
- バージョン:1.6.2
- リリース日:2019年8月
このライブラリを使用することでJavaMailを送信することができます。
また、https://javaee.github.io/javamail/#Download_JavaMail_Releaseにも、依存性関係として以下の記載があるため、このライブラリを選択するのが正しいと考えられます。
<dependencies>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
まとめ
JavaMailを使用するときのMavenリポジトリと使用する依存性関係の説明を紹介しました。