Spring Boot 3迁移:Axon 4.6未切换至jakarta.persistence仍用javax问题
解决Axon 4.6 + Spring Boot 3迁移中
javax.persistence.MappedSuperclass找不到的问题 Axon 4.6确实支持Jakarta命名空间,但该支持并非默认启用,需要通过显式配置和依赖调整来激活。结合你的Gradle配置,问题出在以下几点:
核心原因
- Axon的Spring Boot Starter默认仍依赖基于
javax.persistence的JPA模块,未自动切换到Jakarta版本。 - 你的依赖中仍保留了
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
相关产品推荐
相关产品推荐

