在使用Gradle 7.4.2和JDK 17的Sping Boot 3.0.4项目中,我在使用gradlew bootRun
运行应用程序时遇到了一个(大量)记录在案的错误:
java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlElement
然后添加此依赖项:
runtimeOnly group: 'com.sun.xml.bind', name: 'jaxb-impl', version:'4.0.0'
当运行gradlew dependencies
时,我得到runtimeClasspath
:
runtimeClasspath - Runtime classpath of source set 'main'.
+--- com.google.code.findbugs:jsr305:3.0.2
+--- org.springframework.boot:spring-boot-starter-web -> 3.0.4
| +--- org.springframework.boot:spring-boot-starter:3.0.4
| | +--- org.springframework.boot:spring-boot:3.0.4
...
+--- net.logstash.logback:logstash-logback-encoder:7.3
| \--- com.fasterxml.jackson.core:jackson-databind:2.14.2 (*)
+--- org.codehaus.janino:janino -> 3.1.9
| \--- org.codehaus.janino:commons-compiler:3.1.9
+--- com.fasterxml.jackson.module:jackson-module-jaxb-annotations -> 2.14.2
| +--- com.fasterxml.jackson.core:jackson-annotations:2.14.2 (*)
| +--- com.fasterxml.jackson.core:jackson-core:2.14.2 (*)
| +--- com.fasterxml.jackson.core:jackson-databind:2.14.2 (*)
| +--- jakarta.xml.bind:jakarta.xml.bind-api:2.3.3 -> 4.0.0 (*)
| +--- jakarta.activation:jakarta.activation-api:1.2.2 -> 2.1.1
| \--- com.fasterxml.jackson:jackson-bom:2.14.2 (*)
\--- com.sun.xml.bind:jaxb-impl:4.0.0
\--- com.sun.xml.bind:jaxb-core:4.0.0 -> 4.0.2
+--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.0 (*)
\--- org.eclipse.angus:angus-activation:2.0.0 (*)
所以jakarta.xml.bind:jakarta.xml.bind-api:4.0.0
是存在的,因此应该找到javax.xml.bind.annotation.XmlElement
(我看到它属于我的IDE中的jakarta.xml. bind-apijar)..但它不是。
我错过了什么?
1条答案
按热度按时间o2gm4chl1#
好吧,这很奇怪…
最初,我的依赖关系是:
但我得到了这个错误:
所以我添加了这个依赖项,以便找到缺少的类:
但我得到的是:
添加
runtimeOnly group: 'com.sun.xml.bind', name: 'jaxb-impl', version:'4.0.0'
没有帮助,如问题中所述。现在,我刚刚删除了
jackson-module-jaxb-annotations
,留下了jaxb-impl
,它可以工作..我有点困惑的“为什么”,虽然..下面是
dependencies
任务的输出: