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

基于gradle:6.9.1-jdk11-hotspot构建Java项目出现间歇性编译错误咨询

触发原因
  • JDK 9 引入的模块系统中,javax.xml.stream 相关类归属 java.xml 标准模块,默认对未命名模块开放。你项目中使用的 io.freefair.aspectj.compile-time-weaving:3.8.4 插件版本对 JDK 11 模块路径适配存在缺陷,构建过程中偶发时序问题,会误将 java.xml 模块从编译可见范围排除,导致类不可访问报错。
  • 3.x 版本的 aspectj 编译织入插件与 Gradle 6.9.1 适配不稳定,容器环境下资源调度的波动会放大这个加载缺陷,因此报错为间歇性,重试时插件加载路径正常就可以构建成功。
可行解决方案

方案1:升级aspectj编译织入插件(最彻底)

将 io.freefair.aspectj.compile-time-weaving 插件升级到适配 Gradle 6.x 的最新稳定版 6.6.3,该版本已经修复了 JDK 模块路径间歇性加载异常的问题。

方案2:强制声明模块可见性

在 build.gradle 中分别给编译任务和 aspectj 织入任务添加模块开放参数,强制暴露 javax.xml.stream 包:

// Java编译任务添加参数
compileJava {
    options.compilerArgs += ['--add-modules', 'java.xml', '--add-exports', 'java.xml/javax.xml.stream=ALL-UNNAMED']
}

// AspectJ织入任务添加参数
aspectj {
    ajc.args = ['--add-modules', 'java.xml', '--add-exports', 'java.xml/javax.xml.stream=ALL-UNNAMED']
}

方案3:显式引入stax-api兼容包

不需要调整模块参数,直接在项目依赖中引入独立的stax-api包,绕开JDK模块系统的限制:

implementation 'javax.xml.stream:stax-api:1.0-2'

方案4:Docker构建层面优化

在Dockerfile的Gradle执行命令中添加JVM参数,避免资源不足触发的类加载异常:

RUN gradle --stacktrace  --no-daemon :common:build -Dorg.gradle.jvmargs="-Xmx2g --add-modules java.xml"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:45:06