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 年1111月)
使用最新版本的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 月)
使用最新版本的karJata 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中文網其他相關文章!