Java 11包javax.xml.bind不存在

Bor*_*ris 99 java jaxb java-11

我正在尝试使用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();
}
Run Code Online (Sandbox Code Playgroud)

当我使用Java 8构建项目时,它很好,但使用Java 11构建它失败并出现编译错误:

package javax.xml.bind does not exist
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Bor*_*ris 192

根据发行说明,Java 11删除了Java EE模块:

java.xml.bind (JAXB) - REMOVED
Run Code Online (Sandbox Code Playgroud)
  • Java 8 - 好的
  • 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>
Run Code Online (Sandbox Code Playgroud)

  • 版本不正确。最新版本为: jaxb-api:2.3.1 jaxb-core:2.2.11 jaxb-impl:2.0.2 您可以在以下位置查看最新版本:https://mvnrepository.com/artifact/javax.xml.bind (3认同)
  • @ivan_drago 你可以尝试添加 [jaxb-runtime](https://search.maven.org/artifact/org.glassfish.jaxb/jaxb-runtime) 依赖项吗?`&lt;dependency&gt; &lt;groupId&gt;org.glassfish.jaxb&lt;/groupId&gt; &lt;artifactId&gt;jaxb-runtime&lt;/artifactId&gt; &lt;version&gt;2.3.2&lt;/version&gt; &lt;/dependency&gt;` (3认同)
  • 我正在将Spring Boot 2.1.0应用程序升级到Java 11,但是每次启动JAR都会输出:在启动层java.lang.module.FindException初始化期间发生错误:找不到模块java.xml.bind。我添加了这三个依赖项,但是没有运气。还有其他需要检查的东西吗?我正在运行Java 11.0.1。 (2认同)