概要
OracleJDK 8 から OpenJDK 11 に変更したところ、JavaMail で以下の例外が発生するようになりメール送信が一切できなくなりました。
java.lang.NoClassDefFoundError: javax/activation/DataSource
(略)
Caused by: java.lang.ClassNotFoundException: javax.activation.DataSource
本記事では OpenJDK 11 以降で JavaMail を使うための方法についてご紹介します。
例外発生の原因
JavaMail では内部で java.activation
パッケージを使用していますが、OpenJDK 11 以降では JEP 320: Remove the Java EE and CORBA Modules によって以下のパッケージが削除されています。
- java.xml.ws
- java.xml.bind
- java.activation
- java.xml.ws.annotation
- java.corba
- java.transaction
java.activation
パッケージが削除されたことにより JavaMail で参照するクラスが見つからなくなり概要で示した例外が発生しています。
対処法
java.activation
パッケージとして JavaBeans Activation Framework を使用することで JavaMail が使えるようになります。
Maven
<!-- https://mvnrepository.com/artifact/com.sun.activation/javax.activation -->
<dependency>
<groupId>com.sun.activation</groupId>
<artifactId>javax.activation</artifactId>
<version>1.2.0</version>
</dependency>
Gradle
// https://mvnrepository.com/artifact/com.sun.activation/javax.activation
compile group: 'com.sun.activation', name: 'javax.activation', version: '1.2.0'