升级至Java 17后Gradle构建报错,AspectJ依赖异常求助
我正在将测试框架升级为使用Java 17,采用Gradle构建工具,配置如下:
java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } }
同时已将Gradle升级至8.0.2版本,但构建项目时收到报错:
[error] target level should be in '1.1'...'1.8','9'...'14': 17
报错提示与AspectJ库相关,但我无法理解具体原因。随后尝试将AspectJ插件升级至最新版本id "io.freefair.aspectj.post-compile-weaving" version "8.0.1",结果IDE无法识别AspectJ依赖,出现报错:
error: package org.aspectj.lang.annotation does not exist
我不清楚问题根源在哪,希望解决该问题使项目适配Java 17(当前使用Java 14和AspectJ)。
1. 解决AspectJ版本兼容问题
旧版AspectJ(版本低于1.9.8)不支持Java 17,你遇到的第一个报错,本质是当前使用的AspectJ runtime或编译器版本无法识别Java 17的目标级别。必须升级AspectJ核心依赖到支持Java 17的版本(1.9.8及以上,推荐最新稳定版如1.9.20.1)。
2. 完整配置Gradle插件与依赖
升级Freefair插件后出现依赖找不到的问题,是因为插件升级后需要显式指定兼容Java 17的AspectJ依赖版本,同时要确保AspectJ编译任务的目标级别与Java 17对齐。以下是完整的配置示例:
plugins { id 'java' id 'io.freefair.aspectj.post-compile-weaving' version '8.0.1' } java { toolchain { languageVersion.set(JavaLanguageVersion.of(17)) } } dependencies { // 引入AspectJ核心依赖,版本需支持Java17 aspectj 'org.aspectj:aspectjrt:1.9.20.1' aspectj 'org.aspectj:aspectjweaver:1.9.20.1' // 测试环节若需AspectJ,添加对应依赖 testImplementation 'org.aspectj:aspectjrt:1.9.20.1' } // 强制AspectJ编译任务使用Java17的源和目标级别 tasks.withType(io.freefair.gradle.plugins.aspectj.AspectJCompile) { sourceCompatibility = '17' targetCompatibility = '17' }
3. 同步IDE配置
- 执行Gradle项目刷新操作,让IDE重新加载依赖配置
- 确认IDE的项目SDK已设置为Java 17
- 若使用IntelliJ IDEA,确保AspectJ插件已启用并更新至最新版本
4. 排查依赖冲突
如果仍存在版本兼容问题,检查项目中是否有其他依赖间接引入了旧版AspectJ。可通过执行./gradlew dependencies命令查看依赖树,然后通过强制依赖版本来排除冲突:
configurations.all { resolutionStrategy { force 'org.aspectj:aspectjrt:1.9.20.1' force 'org.aspectj:aspectjweaver:1.9.20.1' } }
内容的提问来源于stack exchange,提问作者captain D

