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

gradle-swagger-generator-plugin在Java 17环境下无法正常工作

解决Java 17升级后gradle-swagger-generator-plugin的反射访问错误

问题场景

将Gradle项目的Java版本从11升级到17后,gradle-swagger-generator-plugin执行时抛出反射访问权限错误:

com.github.jknack.handlebars.HandlebarsException: /handlebars/JavaSpring/pojo.mustache:2:6: java.lang.reflect.InaccessibleObjectException: Unable to make public boolean java.util.Collections$EmptyMap.isEmpty() accessible: module java.base does not "opens java.util" to unnamed module @2f465398

现有配置与已尝试方案

当前使用的插件版本为2.19.2,配置片段:

buildscript {
    dependencies {
        classpath('gradle.plugin.org.hidetake:gradle-swagger-generator-plugin:2.19.2')
    }
}
plugins {
    ...
    id 'org.hidetake.swagger.generator' version '2.19.2'
}

已尝试的修复动作:

  • 强制指定handlebars版本为4.3.1
  • 在gradle.properties添加JVM参数:org.gradle.jvmargs=--add-opens java.base/java.util=ALL-UNNAMED

有效解决方案

方案1:升级插件到兼容Java 17的版本

2.19.2版本的插件依赖的Swagger Codegen和Handlebars版本未适配Java 17的模块系统限制。建议升级到最新的兼容版本(如3.0.0+,具体版本可参考插件官方发布记录):

plugins {
    ...
    id 'org.hidetake.swagger.generator' version '3.0.0'
}
buildscript {
    dependencies {
        classpath('gradle.plugin.org.hidetake:gradle-swagger-generator-plugin:3.0.0')
    }
}

方案2:为代码生成任务单独添加JVM参数

org.gradle.jvmargs仅作用于Gradle守护进程,插件的代码生成任务可能运行在独立进程中,需直接给任务配置参数:

tasks.withType(io.swagger.codegen.v3.GenerateTask) {
    jvmArgs = [
        '--add-opens', 'java.base/java.util=ALL-UNNAMED',
        '--add-opens', 'java.base/java.util.Collections=ALL-UNNAMED'
    ]
}

方案3:升级Handlebars到适配模块系统的版本

旧版本Handlebars的反射逻辑未兼容Java 17,升级到4.7.7及以上版本(该版本修复了模块系统反射问题),同时排除插件自带的旧版本依赖:

buildscript {
    dependencies {
        classpath('gradle.plugin.org.hidetake:gradle-swagger-generator-plugin:2.19.2') {
            exclude group: 'com.github.jknack', module: 'handlebars'
        }
        classpath('com.github.jknack:handlebars:4.7.7') {
            force = true
        }
    }
}

原因说明

Java 17强化了模块系统的反射访问控制,旧版本的Handlebars和Swagger Codegen依赖通过反射访问java.util包时,未获得模块的开放权限。升级依赖可解决底层适配问题,或通过--add-opens参数显式开放模块访问权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 14:28:23