java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
我是 Java 和 Gradle 的新手,我正在尝试构建一个简单的 REST API,这是我的依赖项
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:2.7.0'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
implementation("org.springframework.boot:spring-boot-starter-actuator:2.6.7")
implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
implementation 'com.sun.xml.bind:jaxb-core:4.0.0-M4'
implementation 'com.sun.xml.bind:jaxb-impl:4.0.0-M4'
}
我收到以下错误:
java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
我见过类似的问题,但找不到解决方案
您的 JAXB API 和实现版本不匹配。 jaxb-core 4.0.0-M4 depends on jakarta.xml.bind:jakarta.xml.bind-api 4.0.0。这与您的 JAXB API 版本完全不兼容。最大的区别是您的 JAXB API 版本使用 javax
包前缀,而 Jakarta API 版本使用 jakarta
包前缀。我猜 Spring 想要使用与您正在使用的 API 版本兼容的实现(Spring 尚未切换到 Jakarta EE 9)。
我正在查看是否有 Spring 用于 JAXB 的引导启动器或类似的东西,但我找不到任何东西。这意味着您可能需要提供自己的实现。我建议您改用 Jakarta EE 8 版本:https://mvnrepository.com/artifact/jakarta.xml.bind/jakarta.xml.bind-api/2.3.3 for the API, and https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime/2.3.6 来实现。两者都是仍然使用 javax
包前缀的最新版本。
我是 Java 和 Gradle 的新手,我正在尝试构建一个简单的 REST API,这是我的依赖项
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:2.7.0'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2'
implementation("org.springframework.boot:spring-boot-starter-actuator:2.6.7")
implementation 'javax.xml.bind:jaxb-api:2.4.0-b180830.0359'
implementation 'com.sun.xml.bind:jaxb-core:4.0.0-M4'
implementation 'com.sun.xml.bind:jaxb-impl:4.0.0-M4'
}
我收到以下错误:
java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory
我见过类似的问题,但找不到解决方案
您的 JAXB API 和实现版本不匹配。 jaxb-core 4.0.0-M4 depends on jakarta.xml.bind:jakarta.xml.bind-api 4.0.0。这与您的 JAXB API 版本完全不兼容。最大的区别是您的 JAXB API 版本使用 javax
包前缀,而 Jakarta API 版本使用 jakarta
包前缀。我猜 Spring 想要使用与您正在使用的 API 版本兼容的实现(Spring 尚未切换到 Jakarta EE 9)。
我正在查看是否有 Spring 用于 JAXB 的引导启动器或类似的东西,但我找不到任何东西。这意味着您可能需要提供自己的实现。我建议您改用 Jakarta EE 8 版本:https://mvnrepository.com/artifact/jakarta.xml.bind/jakarta.xml.bind-api/2.3.3 for the API, and https://mvnrepository.com/artifact/org.glassfish.jaxb/jaxb-runtime/2.3.6 来实现。两者都是仍然使用 javax
包前缀的最新版本。