Gradle 如何在Java12上解决JAXB类路径问题

Gradle 如何在Java12上解决JAXB类路径问题,gradle,jaxb,java-11,java-12,Gradle,Jaxb,Java 11,Java 12,我正在使用JAXB将应用程序移植到JDK 11/12,但在尝试修复这些JAXB类路径问题时,我完全迷失了方向。我已经在谷歌上搜索并阅读了与此相关的所有内容,因此我知道Java11中所做的更改,即从JDK中删除JAXB。。。然而,在这种情况下,我会假设一个简单的修复,包括在类路径上添加api和impl JAR。但是这不起作用,尽管我在类路径上有那些JAR,我仍然得到了已知的异常,尽管使用了2.3.2 JAXB: javax.xml.bind.JAXBException -除此之外: [java.l

我正在使用JAXB将应用程序移植到JDK 11/12,但在尝试修复这些JAXB类路径问题时,我完全迷失了方向。我已经在谷歌上搜索并阅读了与此相关的所有内容,因此我知道Java11中所做的更改,即从JDK中删除JAXB。。。然而,在这种情况下,我会假设一个简单的修复,包括在类路径上添加api和impl JAR。但是这不起作用,尽管我在类路径上有那些JAR,我仍然得到了已知的异常,尽管使用了2.3.2 JAXB:

javax.xml.bind.JAXBException -除此之外: [java.lang.ClassNotFoundException:com.sun.xml.internal.bind.v2.ContextFactory]

即使我看到类在不同的包中,并且我通过系统变量指示使用正确的包,它也不起作用:

gradle-Djavax.xml.bind.context.factory=com.sun.xml.bind.v2.ContextFactory构建

javax.xml.bind.JAXBException -除此之外: [java.lang.ClassNotFoundException:com.sun.xml.bind.v2.ContextFactory]

有人知道如何解决这个问题吗?我不想玩清单文件等。它应该是可能的,只是把正确的JAR类路径上,这是它,还是不

此处有摘要,但无法使其正常工作:

更新,Gradle中使用的依赖项: -jaxb xjc将jaxb运行时(impl.)作为可传递依赖项。我看到它是格雷德选的,但还是一样的错误

classpath "com.sun.activation:javax.activation:1.2.0"
classpath "jakarta.xml.bind:jakarta.xml.bind-api:2.3.2"
classpath "org.glassfish.jaxb:jaxb-xjc:2.3.2"
classpath"org.glassfish.jaxb:jaxb-core:2.3.0.1"
[org.gradle.internal.operations.DefaultBuildOperationExecutor]已完成生成操作“解析jaxb-runtime.jar(org.glassfish.jaxb:jaxb-runtime:2.3.2)”

[org.gradle.internal.component.model.ComponentAttributeMatcher]为{org.gradle.dependency.bundling=external,org.gradle.jvm.version=12,org.gradle.usage=java runtime}从候选[org.glassfish.jaxb:jaxb运行时:2.3.2配置运行时]中选择匹配org.glassfish.jaxb:jaxb运行时:2.3.2配置运行时

这是“gradle依赖项”的输出,所有JAXB JAR都在那里,但仍会抛出类路径错误。Glassfish的JAR文件jaxb运行时肯定有这个ContextFactory类

runtimeClasspath - Runtime classpath of source set 'main'.
+--- org.springframework.boot:spring-boot-starter-log4j2 -> 2.1.0.RELEASE
|    +--- org.apache.logging.log4j:log4j-slf4j-impl:2.11.1
|    |    +--- org.slf4j:slf4j-api:1.7.25
|    |    +--- org.apache.logging.log4j:log4j-api:2.11.1
|    |    \--- org.apache.logging.log4j:log4j-core:2.11.1
|    |         \--- org.apache.logging.log4j:log4j-api:2.11.1
|    +--- org.apache.logging.log4j:log4j-core:2.11.1 (*)
|    +--- org.apache.logging.log4j:log4j-jul:2.11.1
|    |    \--- org.apache.logging.log4j:log4j-api:2.11.1
|    \--- org.slf4j:jul-to-slf4j:1.7.25
|         \--- org.slf4j:slf4j-api:1.7.25
+--- org.projectlombok:lombok -> 1.18.2
+--- org.apache.commons:commons-lang3 -> 3.8.1
+--- org.apache.commons:commons-collections4 -> 4.4
+--- com.google.guava:guava -> 23.0
|    +--- com.google.code.findbugs:jsr305:1.3.9
|    +--- com.google.errorprone:error_prone_annotations:2.0.18
|    +--- com.google.j2objc:j2objc-annotations:1.1
|    \--- org.codehaus.mojo:animal-sniffer-annotations:1.14
+--- org.apache.ws.xmlschema:xmlschema-core -> 2.0.1
+--- org.glassfish.jaxb:jaxb-runtime:2.3.2
|    +--- jakarta.xml.bind:jakarta.xml.bind-api:2.3.2
|    |    \--- jakarta.activation:jakarta.activation-api:1.2.1
|    +--- org.glassfish.jaxb:txw2:2.3.2
|    +--- com.sun.istack:istack-commons-runtime:3.0.8
|    |    \--- jakarta.activation:jakarta.activation-api:1.2.1
|    +--- org.jvnet.staxex:stax-ex:1.8.1
|    |    +--- jakarta.activation:jakarta.activation-api:1.2.1
|    |    \--- jakarta.xml.bind:jakarta.xml.bind-api:2.3.2 (*)
|    +--- com.sun.xml.fastinfoset:FastInfoset:1.2.16
|    \--- jakarta.activation:jakarta.activation-api:1.2.1
\--- org.glassfish.jaxb:jaxb-core:2.3.0.1
     +--- javax.xml.bind:jaxb-api:2.3.0 -> 2.3.1
     |    \--- javax.activation:javax.activation-api:1.2.0
     +--- org.glassfish.jaxb:txw2:2.3.0.1 -> 2.3.2
     \--- com.sun.istack:istack-commons-runtime:3.0.5 -> 3.0.8 (*)

出于某种原因,我在Glassfish罐子上没有运气,但是那些原始的Sun/Oracle依赖项起了作用。

不启用不推荐使用的javax.xml.bind模块,而应该简单地将所需的库作为依赖项添加到项目中:我相信我有这些依赖项,但无法消除错误。更新了详细的依赖关系信息。这是否回答了您的问题?我使用的是
javax.xml.bindjaxb-api2.3.0 com.sun.xml.bindjaxb-core2.3.0