web-dev-qa-db-ja.com

Java 11パッケージjavax.xml.bindが存在しません

JAXB を使用してXMLデータをJavaコンテンツツリーにデシリアライズし、XMLデータが非整列化されていることを検証します。

try {
  JAXBContext context = JAXBContext.newInstance("com.acme.foo");
  Unmarshaller unmarshaller = context.createUnmarshaller();
  unmarshaller.setSchema(schema);
  FooObject fooObj = (FooObject) unmarshaller.unmarshal(new File("foo.xml"));
} catch (UnmarshalException ex) {
  ex.printStackTrace();
} catch (JAXBException ex) {
  ex.printStackTrace();
}

Java 8でプロジェクトをビルドすると問題ありませんが、Java 11でプロジェクトをビルドすると失敗します。コンパイルエラー:

package javax.xml.bind does not exist

どうすれば問題を解決できますか?

53
Boris

リリースノート によると、Java 11はJava EEモジュールを削除しました。

Java.xml.bind (JAXB) - REMOVED
  • Java 8 - OK
  • Java 9 - 廃止予定
  • Java 10 - 廃止予定
  • Java 11 - 削除済み

詳しくは JEP 320 をご覧ください。

Java EEテクノロジの代替バージョンを使用して問題を解決できます。必要なクラスを含むMaven依存関係を追加するだけです。

<dependency>
  <groupId>javax.xml.bind</groupId>
  <artifactId>jaxb-api</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.Sun.xml.bind</groupId>
  <artifactId>jaxb-core</artifactId>
  <version>2.3.0</version>
</dependency>
<dependency>
  <groupId>com.Sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.0</version>
</dependency>
98
Boris