要与Java 17项目一起使用的JAXB Jar文件是什么?



我正在将我的项目从Java 8升级到Java 17。我的项目使用JAXB相关的JAR文件。然而,我在编译项目时遇到了很多错误,其中大多数都与JAXB有关。有没有人可以帮助我与JAXB相关的JAR文件和他们的版本,我应该在我的项目中使用Java 17?另外,请建议我应该使用兼容的JAVA EE版本。

在Java 8和更早的版本中,JAXB集成在JVM本身中,但在Java 9中进行了更改。由于JVM的模块化(Project Jigsaw), JAXB和其他一些组件从JDK中删除了。这并不意味着不再支持JAXB,只是它是需要放在类路径上的另一个依赖项。

由于JavaEE/Jakarta EE在命名空间方面有破坏性的变化,正确的依赖坐标取决于使用的是哪种企业规范。

在JavaEE 8的情况下-javax.*命名空间-正确的依赖关系是:

<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>

和JakartaEE的依赖编译器——jakarta.*命名空间——是:

<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>

开始将从Java 8迁移到Java 11第一。

然后阅读例如在Java 11中移除Java EE和CORBA模块(https://docs.oracle.com/en/java/javase/11/migrate/index.html#JSMIG-GUID-561005C1-12BB-455C-AD41-00455CAD23A6): JAXB和JAX-WS不再与JDK捆绑。

或者这个:https://learn.microsoft.com/java/openjdk/transition-from-java-8-to-java-11

因此,您需要添加JAX-B。 与Maven:

<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>2.3.3</version>
</dependency>

然而,实现也可能是必要的。

:

<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>2.3.8</version>
</dependency>

下面是我在hisrc-higherjaxb-sample-jaxbplugins (zip) (JAXB 4)中使用的JAXB依赖项。使用JDK 17构建的样例项目。关注这个依赖关系树中hisrc-basicjaxb-runtime下面的依赖关系,就可以找到问题的答案。

org.patrodyne.jvnet:hisrc-higherjaxb-sample-jaxbplugins:jar:2.1.0
+- org.patrodyne.jvnet:hisrc-basicjaxb-runtime:jar:2.1.0:compile
|  +- jakarta.activation:jakarta.activation-api:jar:2.1.1:compile
|  +- jakarta.xml.bind:jakarta.xml.bind-api:jar:4.0.0:compile
|  +- org.glassfish.jaxb:jaxb-runtime:jar:4.0.2:compile
|  |  - org.glassfish.jaxb:jaxb-core:jar:4.0.2:compile
|  |     +- org.eclipse.angus:angus-activation:jar:2.0.0:runtime
|  |     +- org.glassfish.jaxb:txw2:jar:4.0.2:compile
|  |     - com.sun.istack:istack-commons-runtime:jar:4.1.1:compile
|  +- commons-io:commons-io:jar:2.11.0:compile
|  - org.slf4j:slf4j-api:jar:2.0.6:compile
- org.patrodyne.jvnet:hisrc-basicjaxb-testing:jar:2.1.0:test
+- org.junit.jupiter:junit-jupiter-api:jar:5.9.2:test
|  +- org.opentest4j:opentest4j:jar:1.2.0:test
|  +- org.junit.platform:junit-platform-commons:jar:1.9.2:test
|  - org.apiguardian:apiguardian-api:jar:1.1.2:test
- xmlunit:xmlunit:jar:1.6:test

注:4。JAXB API的x版本,RI和ZIP使用最新的JAXB模式绑定3.0规范用于Jakarta EE 10。