java ClassNotFoundException,尽管提供了正确的Gradle依赖项

toiithl6  于 2023-04-04  发布在  Java
关注(0)|答案(1)|浏览(99)

在使用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)..但它不是。
我错过了什么?

o2gm4chl

o2gm4chl1#

好吧,这很奇怪…
最初,我的依赖关系是:

runtimeOnly group: 'net.logstash.logback', name: 'logstash-logback-encoder', version: '7.3'
runtimeOnly group: 'org.codehaus.janino', name: 'janino'

但我得到了这个错误:

Error occurred while dynamically loading jackson modules java.util.ServiceConfigurationError: com.fasterxml.jackson.databind.Module: Provider com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule not found

所以我添加了这个依赖项,以便找到缺少的类:

runtimeOnly group: 'com.fasterxml.jackson.module', name: 'jackson-module-jaxb-annotations'

但我得到的是:

Caused by: java.lang.ClassNotFoundException:javax.xml.bind.annotation.XmlElement

添加runtimeOnly group: 'com.sun.xml.bind', name: 'jaxb-impl', version:'4.0.0'没有帮助,如问题中所述。
现在,我刚刚删除了jackson-module-jaxb-annotations,留下了jaxb-impl,它可以工作..我有点困惑的“为什么”,虽然..
下面是dependencies任务的输出:

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
\--- jakarta.xml.bind:jakarta.xml.bind-api:4.0.0 (*)

相关问题