-
Notifications
You must be signed in to change notification settings - Fork 2
Description
Java 9で「モジュール」の機能が追加された際に、標準ライブラリからいくつかのモジュールが非推奨となりました。その中に、Java本格入門で紹介しているJAXB(p.262)も含まれています。
そのため、Java 9以降のJDKでは、本書のサンプルはコンパイルエラーとなります。
Java 9以降でJAXBを使用する場合は、依存関係に次の内容を追加する必要があります。
- activation-api
- jaxb-api
- jaxb-core
- jaxb-impl
ここでは、モジュールを追加する場合、jarファイルを直接指定する場合、Mavenを使用する場合(Mavenについては「Chapter 13」を参照)の3種類の方法を記載します。
モジュールを追加する場合(Java 9 / Java 10のみ)
コンパイル時と実行時に、JAXBのモジュール(java.xml.bind)を追加するよう、「--add-modules」オプションを指定します。
javac --add-modules java.xml.bind コンパイル対象Javaファイル
java --add-modules java.xml.bind 実行対象クラス
Eclipseでビルドパスに追加する方法は次の通りです。
- プロジェクトのプロパティから、「Java Build Path」を開き、「JRE System Library」の中の「Is modular」をダブルクリックします。

- 「Available modules」の中の「java.xml.bind」を選択し、「→」ボタンをクリックして「Explicitly included modules」の中に入れ、「OK」ボタンをクリックします。

なお、java.xml.bindモジュールを追加する方法は、Java 9とJava 10でのみ使用可能です。Java 11以降ではjava.xml.bindモジュールがJDKから削除されているため、他の方法を使用してください。
jarファイルを直接指定する場合
上記4つのjarファイルをダウンロードし、クラスパスに追加します。Maven Central Repositoryからダウンロードできます。
https://mvnrepository.com/artifact/javax.activation/javax.activation-api
https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api
https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-core
https://mvnrepository.com/artifact/com.sun.xml.bind/jaxb-impl
Mavenを使用する場合
pom.xmlに次の内容を追加します。
<dependency>
<groupId>javax.activation</groupId>
<artifactId>javax.activation-api</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.4.0-b180830.0359</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.4.0-b180830.0438</version>
</dependency>※上記バージョンは、2018/11/12時点の最新バージョンです。