我正在将我的项目从 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使用 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>
中使用的 JAXB 依赖项,这是一个使用 JDK 17 构建的 JAXB 4.x 示例项目。重点关注下面的依赖项 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
API、RI 和 ZIP 的 4.x 版本使用适用于 Jakarta EE 10 的最新 JAXB Schema Binding 3.0 规范。
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.3.7</version>
</dependency>
<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>
</dependencies>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.4</version>
</dependency>
<dependency>
<groupId>org.glassfish.jaxb</groupId>
<artifactId>jaxb-runtime</artifactId>
<version>4.0.0</version>
</dependency>