GitLab gemnasium-maven v3.11.1依赖扫描失败:不支持类文件版本61
解决GitLab依赖扫描编译失败(Unsupported class file major version 61)问题
问题背景
在自建GitLab v15.7.5服务器上配置依赖扫描,重写stage并引入作业模板指定test阶段后,扫描作业启动即失败。开启SECURE_LOG_LEVEL=debug后,发现错误根源是Gradle初始化脚本编译失败,核心报错:
java.lang.IllegalArgumentException: Unsupported class file major version 61
当前环境使用Java 17(adoptopenjdk-17.0.2+8),扫描器自动选用Gradle 7.1.1执行依赖导出。
原因分析
Class文件版本号61对应Java 17,但Gradle 7.1.1内置的Groovy依赖的ASM库不支持解析Java 17的class文件,导致初始化脚本编译失败。
解决方案
1. 升级项目Gradle版本
Gradle 7.3及以上版本已官方支持Java 17,直接升级项目Gradle版本即可解决兼容问题:
修改项目根目录下gradle/wrapper/gradle-wrapper.properties中的distributionUrl:
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-bin.zip
提交修改后重新触发CI作业,扫描器会使用升级后的Gradle版本执行依赖导出。
2. 指定扫描器使用Java 11
若暂时无法升级Gradle,可通过CI变量强制扫描器切换到Java 11环境:
在项目Settings > CI/CD > Variables中添加变量:
- 变量名:
GRADLE_JAVA_VERSION - 变量值:
adoptopenjdk-11.0.16+8
扫描器会使用Java 11运行Gradle,避开Java 17的class版本兼容问题。
3. 优先使用Maven扫描(若项目支持)
如果项目同时存在Maven的pom.xml文件,可通过变量让扫描器优先处理Maven依赖,跳过Gradle扫描:
添加CI变量:
- 变量名:
GEMNASIUM_MAVEN_DEPENDENCY_FILE_PATTERN - 变量值:
pom.xml
扫描器会优先识别并处理Maven依赖文件,绕开Gradle的兼容性问题。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

