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

Spring Boot启动报错:重复定义jakarta.persistence.TemporalType

问题:Spring Boot启动触发LinkageError(重复类定义)

环境配置

Java 21 
Spring Boot 3.3.2 
VM options: -javaagent:/aspectjweaver-1.9.22.1.jar -javaagent:/spring-instrument-6.1.11.jar

错误信息

Caused by: java.lang.LinkageError: loader 'app' attempted duplicate class definition for jakarta.persistence.TemporalType. (jakarta.persistence.TemporalType is in unnamed module of loader 'app')
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    at org.hibernate.type.descriptor.jdbc.TimestampUtcAsJdbcTimestampJdbcType.getJdbcLiteralFormatter(TimestampUtcAsJdbcTimestampJdbcType.java:77)
    at org.hibernate.type.AbstractStandardBasicType.<init>(AbstractStandardBasicType.java:65)
    at org.hibernate.type.AbstractSingleColumnStandardBasicType.<init>(AbstractSingleColumnStandardBasicType.java:27)
    at org.hibernate.type.internal.BasicTypeImpl.<init>(BasicTypeImpl.java:29)
    at org.hibernate.type.internal.NamedBasicTypeImpl.<init>(NamedBasicTypeImpl.java:20)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.adaptTimestampTypesToDefaultTimeZoneStorage(MetadataBuildingProcess.java:810)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:732)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:176)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1431)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1502)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:75)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:390)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:366)
    ... 34 common frames omitted

原因分析与解决方案

核心原因

jakarta.persistence.TemporalType类被类加载器重复定义,大概率是AspectJ Weaver的jar包与项目依赖的Jakarta Persistence API存在类冲突,或是AspectJ版本与Spring Boot 3.x(基于Jakarta EE规范)不兼容。

解决步骤

  1. 替换AspectJ依赖方式
    移除手动指定的aspectjweaver-1.9.22.1.jar,改用Spring Boot官方提供的spring-boot-starter-aop依赖,它会自动管理兼容的AspectJ版本,避免版本不匹配问题:

    <!-- Maven -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>
    
    // Gradle
    implementation 'org.springframework.boot:spring-boot-starter-aop'
    
  2. 检查并排除重复依赖
    执行依赖树分析命令,排查是否存在多个来源的Jakarta Persistence API:

    • Maven:mvn dependency:tree
    • Gradle:./gradlew dependencies
      找到重复的jakarta.persistence:jakarta.persistence-api依赖,通过<exclusions>(Maven)或exclude(Gradle)排除多余的引入。
  3. 统一Spring Instrument版本
    保持spring-instrument版本与Spring Boot版本完全一致,当前Spring Boot 3.3.2对应Spring 6.1.11,你的配置是正确的,但建议通过依赖引入而非手动指定javaagent(如果场景允许):

    <!-- Maven -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-instrument</artifactId>
        <scope>runtime</scope>
    </dependency>
    
  4. 调整VM参数(若必须手动使用javaagent)
    确保使用的aspectjweaver是支持Jakarta EE的版本(1.9.19+),并且该jar包不包含jakarta.persistence下的类——建议从官方渠道下载纯净版的aspectjweaver,避免被篡改的包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 21:13:22