Java 11 中 javax.xml.bind 包不存在
使用 JAXB 解析 XML 数据并对其进行身份验证时:
<code class="java">JAXBContext context = JAXBContext.newInstance("com.acme.foo"); Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.setSchema(schema); FooObject fooObj = (FooObject) unmarshaller.unmarshal(new File("foo.xml"));</code>
基于 Java 8,此代码可以正常运行,但在 Java 11 中,会出现以下编译错误:
package javax.xml.bind does not exist
解决方法
根据发行说明,Java 11 删除了 Java EE 模块,包括 javax.xml.bind (JAXB),这导致了此问题。
要解决此问题,需要使用 Java EE 技术的替代版本,添加包含所需类的 Maven 依赖项即可:
<code class="xml"><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></code>
Jakarta EE 8 更新(2020 年 3 月)
现在可以使用 Jakarta EE 8 中的 Jakarta XML Binding 替换旧的 JAXB 模块:
<code class="xml"><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></code>
Jakarta EE 9 更新(2020 年 11 月)
使用最新版本的 Jakarta XML Binding 3.0:
<code class="xml"><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></code>
注意:随着 Jakarta EE 9 采用新的 API 包命名空间 jakarta.xml.bind.*,请更新导入语句:
<code class="java">javax.xml.bind -> jakarta.xml.bind</code>
Jakarta EE 10 更新(2022 年 6 月)
使用最新版本的 Jakarta XML Binding 4.0(需要 Java SE 11 或更高版本):
<code class="xml"><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></code>
以上是如何解决使用 JAXB 时 Java 11 中的“javax.xml.bind 不存在”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!