Skip to content

Java 9以降でJAXBを使用するには、外部JARが必要 #49

@phonypianist

Description

@phonypianist

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でビルドパスに追加する方法は次の通りです。

  1. プロジェクトのプロパティから、「Java Build Path」を開き、「JRE System Library」の中の「Is modular」をダブルクリックします。
    image
  2. 「Available modules」の中の「java.xml.bind」を選択し、「→」ボタンをクリックして「Explicitly included modules」の中に入れ、「OK」ボタンをクリックします。
    image

なお、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時点の最新バージョンです。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions