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

Spring Boot多模块项目移除重复javax.persistence依赖问题

解决JPA版本冲突与实体识别问题

1. 统一JPA依赖版本,解决冲突

Spring Boot 2.4.4基于javax.persistence体系(Jakarta是Spring Boot 3.x才切换的规范),所以authlib里不要手动引入javax.persistence:persistence-api或Jakarta相关依赖,直接依托Spring Boot的依赖管理来控制版本:

  • 在authlib的build.gradle.kts中,删除手动添加的persistence-api依赖,改为引入Spring Boot管理的JPA规范依赖:
    dependencies {
        // 直接引入Spring Boot管控的JPA API,自动匹配server项目的版本
        implementation("javax.persistence:javax.persistence-api")
    }
    
    这样Gradle会自动使用Spring Boot 2.4.4依赖管理中定义的2.2.3版本,彻底避免版本冲突。
  • 若authlib需要用到JPA的实现类(比如Hibernate相关),也可以直接依赖Spring Boot的JPA starter并排除不需要的模块:
    dependencies {
        implementation("org.springframework.boot:spring-boot-starter-data-jpa") {
            exclude(group = "org.springframework.boot", module = "spring-boot-starter")
            exclude(group = "com.zaxxer", module = "HikariCP")
        }
    }
    

2. 解决实体未被识别的问题

实体移到authlib后,Spring Boot默认只会扫描自身项目下的实体类,需手动指定扫描范围包含authlib的实体包:

  • 在server项目的启动类上添加@EntityScan注解,明确标注authlib实体所在的包路径:
    import org.springframework.boot.autoconfigure.domain.EntityScan;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @SpringBootApplication
    @EntityScan(basePackages = {"com.your.server.entity", "com.your.authlib.entity"}) // 替换为实际包路径
    public class ServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(ServerApplication.class, args);
        }
    }
    
  • 若不想写包路径,也可以直接指定实体类的字节码:
    @EntityScan(basePackageClasses = {User.class, Role.class}) // User、Role为authlib中的实体类
    

3. 额外检查项

  • 确认authlib中的实体类都正确标注了@Entity、@Id等必要注解;
  • 检查server项目的依赖配置,确保authlib依赖未被意外排除;
  • 执行./gradlew clean build清理构建缓存,避免旧依赖残留引发问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:14