時間もかかって結構大変だったので備忘録。
開発中に、今まで動いていたプロジェクトのJavaのバージョンを11にアップデートするという話があった。
結論から言うと、下記のようなメッセージを含むエラーが延々と出て動かなくなった。
JAXBContext cannot be resolved
The import javax.xml.bind cannot be resolved
これ以外のエラーもあったけど、要は javax.xml.bind などの今まで使えていたライブラリが突然使えなくなっていた。
環境
Java11(jdk-11.0.1)
Spring Tool Suite 3.9.6.RELEASE
解決方法
※Mavenのpom.xmlでライブラリを管理している場合のやり方。
pom.xmlに下記を追加
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.0</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
見つからないといわれているライブラリを自力で用意する必要がある。
Oracle JDK 11 のリリースノート
OracleのJDK 11 Release NotesにRemoved Features and Optionsという項目があった。
いくつかのシステムプロパティがJava11から使えなくなるということらしい。
↓ 自分に関係のあった辺りをコピペ。(赤字が自分が怒られていたライブラリ)
In addition, the following system properties are no longer applicable due to the the removal of the Java EE and CORBA modules:
com.sun.xml.internal.ws.client.ContentNegotiation
com.sun.xml.internal.ws.legacyWebMethod
javax.xml.bind.context.factory
javax.xml.bind.JAXBContext
javax.xml.soap.MetaFactory
javax.xml.ws.spi.Provider
jaxb.fragment
jaxb.noNamespaceSchemaLocation
jaxb.schemaLocation
jaxb.formatted.output
jaxb.encoding
リリースノートに全容が書かれています。
■ リリースノート
https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html
■ Removed Features and Options の項目
https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html#Removed
mail.mimeなど他にも色々無くなっている。
ここで削除されたライブラリを今まで使っていたプロジェクトは、用意無しにJava11にアップデートすると、当然エラーが発生するという事だった。
参考
前述したエラーを解決するために(その時は原因も分からなかった)模索していて見つけたページ