問題です。MavenでJavaMailの依存性を定義する場合、以下3つのどれが正しいでしょうか?
1
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
2
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.4.7</version>
</dependency>
3
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.4.7</version>
</dependency>
答えはどれも正解です。
もちろん違いはあって
1はもう使わない。
2はjavax.mail.jarが含まれません。そのため、2の定義だけで実行すると com.sun.mail.util.MailLoggerが見つからずjava.lang.ClassNotFoundExceptionが発生します。
3はjavax.mail.jarを含むので一番堅実な定義です。
なお、2018/3/6現在ではJavaMail 1.6.1が最新なので
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.1</version>
</dependency>
が良さそうです。
1,2,3の違いについてはJavaMailのスペックリード(をされていた?の過去形になってしまうのかな?)のBill Shannonさん自らがStackOverflowで回答&解説されてます。
stackoverflow.com
が、1が2になった理由はちょっとよくわかりませんでした。もう少し調べないと…。