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

Gradle测试触发AspectJ内部错误:不支持类文件主版本61,求解决方案

问题:执行JUnit单元测试时AspectJ类版本不兼容错误

环境信息

------------------------------------------------------------
Gradle 8.7
------------------------------------------------------------

Kotlin:       1.9.22
Groovy:       3.0.17
Ant:          Apache Ant(TM) version 1.10.13 compiled on January 4 2023
JVM:          17.0.8 (Oracle Corporation 17.0.8+9-LTS-211)
OS:           Mac OS X 14.0 x86_64

错误日志

执行./gradlew test-unit -Pci时出现以下错误:

Gradle Test Executor 8 STANDARD_ERROR
    AspectJ Internal Error: unable to add stackmap attributes. Unsupported class file major version 61
    java.lang.IllegalArgumentException: Unsupported class file major version 61
        at aj.org.objectweb.asm.ClassReader.<init>(ClassReader.java:195)
        at aj.org.objectweb.asm.ClassReader.<init>(ClassReader.java:176)
        at aj.org.objectweb.asm.ClassReader.<init>(ClassReader.java:162)
        at org.aspectj.weaver.bcel.asm.StackMapAdder.addStackMaps(StackMapAdder.java:42)
        at org.aspectj.weaver.bcel.LazyClassGen.getJavaClassBytesIncludingReweavable(LazyClassGen.java:764)
        at org.aspectj.weaver.bcel.BcelWeaver.getClassFilesFor(BcelWeaver.java:1464)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1426)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1196)
        at org.aspectj.weaver.tools.WeavingAdaptor.getWovenBytes(WeavingAdaptor.java:551)
        at org.aspectj.weaver.tools.WeavingAdaptor.weaveClass(WeavingAdaptor.java:387)
        at org.aspectj.weaver.loadtime.Aj.preProcess(Aj.java:116)
        at org.aspectj.weaver.loadtime.ClassPreProcessorAgentAdapter.transform(ClassPreProcessorAgentAdapter.java:51)
        at java.instrument/java.lang.instrument.ClassFileTransformer.transform(ClassFileTransformer.java:244)
        at java.instrument/sun.instrument.TransformerManager.transform(TransformerManager.java:188)
        at java.instrument/sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:541)
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
        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:520)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:467)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.loadClass(JUnitPlatformTestClassProcessor.java:168)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.access$100(JUnitPlatformTestClassProcessor.java:62)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:104)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.execute(JUnitPlatformTestClassProcessor.java:94)

已尝试的依赖配置

添加以下JUnit相关依赖后问题未解决:

testImplementation("org.junit.platform:junit-platform-console-standalone:1.10.2")
testImplementation("org.junit.jupiter:junit-jupiter-api")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")

解决方案

1. 升级AspectJ到支持Java 17的版本

错误中的Unsupported class file major version 61对应Java 17的类文件版本,旧版AspectJ依赖的ASM库不支持该版本。需要将AspectJ核心依赖升级到1.9.10及以上版本:

// 核心依赖
implementation("org.aspectj:aspectjrt:1.9.20")
testImplementation("org.aspectj:aspectjweaver:1.9.20")

// 如果使用AspectJ Gradle插件,升级插件版本
plugins {
    id("io.freefair.aspectj.post-compile-weaving") version "8.6"
}

2. 排除冲突的ASM传递依赖

部分第三方库可能引入旧版ASM,导致与AspectJ自带的ASM版本冲突。在build.gradle.kts中添加全局排除:

configurations.all {
    exclude(group = "org.ow2.asm", module = "asm")
    exclude(group = "org.ow2.asm", module = "asm-commons")
    exclude(group = "org.ow2.asm", module = "asm-tree")
}

3. 配置测试任务的JVM参数

确保测试任务正确加载AspectJ织入代理,在build.gradle.kts中添加:

tasks.withType<Test> {
    useJUnitPlatform()
    // 自动获取aspectjweaver路径并添加JavaAgent参数
    jvmArgs("-javaagent:${classpath.find { it.name.startsWith("aspectjweaver") }?.absolutePath}")
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:55:56