Java 11 パッケージ javax.xml.bind が存在しません [重複] 質問する

Java 11 パッケージ javax.xml.bind が存在しません [重複] 質問する

XMLデータをJavaコンテンツツリーにデシリアライズしようとしています。ジャックスBXML データをアンマーシャリングしながら検証します。

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

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

ベストアンサー1

によるリリースノートJava 11 では Java EE モジュールが削除されました。

java.xml.bind (JAXB) - REMOVED
  • Java 8 - OK
  • Java 9 - 非推奨
  • Java 10 - 非推奨
  • Java 11 - 削除

見る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>

Jakarta EE 8 アップデート (2020 年 3 月)

古いJAXBモジュールを使用する代わりに、次の方法で問題を解決できます。Jakarta XML バインディングからジャカルタ EE 8:

<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>2.3.3</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>2.3.3</version>
  <scope>runtime</scope>
</dependency>

Jakarta EE 9 アップデート (2020 年 11 月)

Jakarta XML Bindingの最新リリースを使用する3.0:

<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>3.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>3.0.0</version>
  <scope>runtime</scope>
</dependency>

注: Jakarta EE 9 では新しい API パッケージ名前空間が採用されているjakarta.xml.bind.*ため、インポート ステートメントを更新します。

javax.xml.bind -> jakarta.xml.bind

Jakarta EE 10 アップデート (2022 年 6 月)

Jakarta XML Bindingの最新リリースを使用する4.0(Java SE 11 以降が必要です):

<dependency>
  <groupId>jakarta.xml.bind</groupId>
  <artifactId>jakarta.xml.bind-api</artifactId>
  <version>4.0.0</version>
</dependency>
<dependency>
  <groupId>com.sun.xml.bind</groupId>
  <artifactId>jaxb-impl</artifactId>
  <version>4.0.0</version>
  <scope>runtime</scope>
</dependency>

おすすめ記事