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

Spring Boot 3迁移:Axon 4.6未切换至jakarta.persistence仍用javax问题

解决Axon 4.6 + Spring Boot 3迁移中javax.persistence.MappedSuperclass找不到的问题

Axon 4.6确实支持Jakarta命名空间,但该支持并非默认启用,需要通过显式配置和依赖调整来激活。结合你的Gradle配置,问题出在以下几点:

核心原因

  1. Axon的Spring Boot Starter默认仍依赖基于javax.persistence的JPA模块,未自动切换到Jakarta版本。
  2. 你的依赖中仍保留了javax.transaction、javax.annotation等旧的javax命名空间依赖,与Spring Boot 3的Jakarta环境冲突。

具体解决方案

1. 切换Axon到Jakarta JPA模块

替换原有的Axon Starter依赖,排除旧的javax JPA模块,引入Jakarta版本的JPA适配模块:

implementation ("org.axonframework:axon-spring-boot-starter:$axonVersion"){
    exclude group: 'org.axonframework', module: 'axon-server-connector'
    exclude group: 'org.axonframework', module: 'axon-jpa' // 移除默认的javax JPA模块
}
implementation "org.axonframework:axon-jpa-jakarta:$axonVersion" // 引入Jakarta版本的JPA模块

2. 替换所有javax依赖为Jakarta版本

将配置中的旧javax依赖全部替换为Jakarta对应版本:

// 移除以下两行
// implementation 'javax.transaction:javax.transaction-api:1.3'
// implementation 'javax.annotation:javax.annotation-api:1.3.2'

// 添加Jakarta版本
implementation 'jakarta.transaction:jakarta.transaction-api:2.0.1'
implementation 'jakarta.annotation:jakarta.annotation-api:2.1.1'

3. 强制依赖替换(可选,确保全局无javax残留)

如果仍有第三方依赖偷偷引入javax.persistence,可以通过Gradle的依赖解析规则强制替换:

configurations.all {
    resolutionStrategy.eachDependency { details ->
        // 替换所有javax.persistence为jakarta.persistence
        if (details.requested.group == 'javax.persistence') {
            details.useTarget group: 'jakarta.persistence', name: details.requested.name, version: '3.1.0'
        }
        // 替换其他javax相关依赖
        if (details.requested.group in ['javax.transaction', 'javax.annotation']) {
            def newGroup = details.requested.group.replace('javax', 'jakarta')
            details.useTarget group: newGroup, name: details.requested.name, version: details.requested.version.replace('1.3', '2.0+')
        }
    }
}

4. 验证依赖树

运行以下命令检查依赖树,确保没有javax.persistence相关依赖残留:

./gradlew dependencies | grep javax.persistence

额外注意事项

  • Spring Boot 3的spring-boot-starter-data-jpa已默认使用Jakarta Persistence API,无需额外配置。
  • 你的JAXB依赖org.glassfish.jaxb:jaxb-runtime:4.0.2是Jakarta版本,无需调整;JAX-WS依赖com.sun.xml.ws:jaxws-ri:4.0.1也已适配Jakarta,可保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 09:54:52