You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3 EAR部署WebSphere Liberty启动类找不到错误求助

升级Spring Boot 3 + Java 17到WebSphere Liberty时的ClassNotFoundException问题

环境与配置

已将Spring Boot应用升级至3.x版本,切换到Java 17,WebSphere Liberty服务器已安装Java 17补丁,server.xml中启用的特性如下:

<featureManager>
<feature>servlet-6.0</feature>
<feature>ssl-1.0</feature>
<feature>ldapRegistry-3.0</feature>
<feature>zosLocalAdapters-1.0</feature>
<feature>zosTransaction-1.0</feature>
<feature>jdbc-4.3</feature>
<feature>jndi-1.0</feature>
<feature>springBoot-3.0</feature>
<feature>monitor-1.0</feature>
<feature>mpMetrics-5.0</feature>
<feature>enterpriseBeans-4.0</feature>
</featureManager>

部署异常

部署Spring Boot EAR包时抛出如下ClassNotFoundException:

Caused by: java.lang.ClassNotFoundException: CWWKL0084W: The javax.transaction.Synchronization class could not be loaded. Try enabling the jdbc-4.0 feature or a newer version of the feature in the server.xml file.
    at com.ibm.ws.classloading.internal.util.FeatureSuggestion.getExceptionWithSuggestion(FeatureSuggestion.java:118) ~[na:na]
    at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:606) ~[na:na]
    at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:553) ~[na:na]
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:1095) ~[na:na]
    ... 84 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.transaction.Synchronization
    at com.ibm.ws.classloading.internal.AppClassLoader.findClassCommonLibraryClassLoaders(AppClassLoader.java:742) ~[na:na]
    at com.ibm.ws.classloading.internal.AppClassLoader.findClass(AppClassLoader.java:327) ~[na:na]
    at com.ibm.ws.classloading.internal.AppClassLoader.findOrDelegateLoadClass(AppClassLoader.java:714) ~[na:na]
    at com.ibm.ws.classloading.internal.AppClassLoader.loadClass(AppClassLoader.java:586) ~[na:na]
    ... 86 common frames omitted

应用Gradle依赖

dependencies {

    implementation project(":sofa-domain")
    implementation project(":sofa-business-api")

    implementation platform("org.springframework.boot:spring-boot-dependencies:$springBootVersion")
    implementation("org.springframework.boot:spring-boot-starter-log4j2:$springBootVersion") {
        exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j2-impl'
    }
    implementation("org.springframework.boot:spring-boot-starter-web") {
        exclude group: 'org.apache.tomcat', module: "spring-boot-starter-tomcat"
    }
    implementation('com.fasterxml.jackson.core:jackson-databind:2.16.1')
    implementation("org.springframework.boot:spring-boot-starter-data-jpa")

    implementation("jakarta.xml.bind:jakarta.xml.bind-api:4.0.1")
    providedCompile("jakarta.ejb:jakarta.ejb-api:4.0.1")
    providedCompile("jakarta.resource:jakarta.resource-api:2.1.0")
    implementation("jakarta.validation:jakarta.validation-api:$validationApiVersion")

    implementation("io.springfox:springfox-swagger2:$springfoxVersion")
    implementation("io.springfox:springfox-swagger-ui:$springfoxVersion")
    implementation("io.springfox:springfox-bean-validators:$springfoxVersion")
    implementation('com.ibm.websphere.appserver.features:zosLocalAdapters-1.0:24.0.0.1')
    implementation('com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.zosLocalAdapters.jakarta:1.0.86'){              
        exclude group: 'javax.servlet', module:'javax.servlet-api'      
        exclude group: 'io.openliberty.features', module: 'io.openliberty.servlet.api'
    }
    implementation('com.ibm.websphere.appserver.features:zosSecurity-1.0:24.0.0.1'){
        exclude group: 'io.openliberty.features', module: 'com.ibm.websphere.appserver.eeCompatible'
        exclude group: 'io.openliberty.features', module: 'io.openliberty.servlet.api'
    }
    implementation("com.google.guava:guava:$guavaVersion")
    implementation 'org.glassfish.expressly:expressly:5.0.0'
    implementation group: 'javax.transaction', name: 'jta', version: '1.1'
    compileOnly("org.projectlombok:lombok:$lombokVersion")
    annotationProcessor("org.projectlombok:lombok:$lombokVersion")

    testCompileOnly("org.projectlombok:lombok:$lombokVersion")
    testAnnotationProcessor("org.projectlombok:lombok:$lombokVersion")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("org.spockframework:spock-core:$spockVersion")
    testImplementation("org.spockframework:spock-spring:$spockVersion")
    implementation("org.spockframework:spock-junit4:$spockVersion")

    testRuntimeOnly 'org.junit.vintage:junit-vintage-engine'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'

    providedRuntime("com.ibm.db2.jcc:db2jcc:db2jcc4")

    runtimeOnly ("org.postgresql:postgresql:42.7.0")

    implementation("org.hibernate.validator:hibernate-validator:$validationImplVersion")
    implementation 'org.zalando:problem-spring-web-starter:0.29.1'
}

已尝试但无效的方案

  • 在Gradle中添加javax.transaction:jta:1.1依赖
  • 在server.xml中添加persistence-1.0特性

解决方案

1. 移除旧的Java EE事务依赖

删除Gradle依赖中的implementation group: 'javax.transaction', name: 'jta', version: '1.1'。Spring Boot 3基于Jakarta EE 10,使用jakarta.transaction.*包路径,旧的javax.transaction依赖会与Liberty提供的Jakarta事务API产生类路径冲突,且Liberty的事务特性会自动提供所需的API,无需手动添加。

2. 添加Jakarta事务特性到server.xml

在featureManager中添加transaction-2.0特性(对应Jakarta EE 10的事务规范),补充现有配置:

<feature>transaction-2.0</feature>

该特性会提供jakarta.transaction.Synchronization类,而旧的javax.transaction.Synchronization在Jakarta EE 10环境中已被废弃,Liberty不会默认提供,必须启用正确的Jakarta事务特性。

3. 确认特性兼容性

zosTransaction-1.0用于z/OS平台的事务集成,依赖基础的transaction-2.0特性提供的API,WebSphere Liberty 24.0.0.1版本中两者完全兼容,无需担心冲突。

4. 清理遗留的javax依赖

检查所有依赖,确保没有其他javax.*开头的API依赖混入(除了必要的遗留库),保证所有API依赖都使用jakarta.*包路径的版本,与Jakarta EE 10规范一致。

内容的提问来源于stack exchange,提问作者SamD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 15:49:50