无法通过Gradle构建Fat Jar及API连接报错求助
解决方案
1. 修复核心反射访问错误
你遇到的InaccessibleObjectException是Java 9+模块系统的限制导致的:代码通过反射访问了java.net.Authenticator的私有静态字段,但java.base模块未将java.net包开放给未命名模块(传统非模块化JAR)。解决这个问题需要给JVM添加启动参数:
--add-opens java.base/java.net=ALL-UNNAMED
两种配置方式
- 直接运行JAR时添加参数:修改终端运行命令为
java --add-opens java.base/java.net=ALL-UNNAMED -jar 你的应用包名.jar - Gradle运行时配置:在项目
build.gradle中给run任务添加JVM参数run { jvmArgs '--add-opens', 'java.base/java.net=ALL-UNNAMED' }
2. 修复Gradle构建问题
纠正错误命令
不要使用gradle ./gradlew run,正确命令是直接执行项目根目录下的Gradle wrapper:
./gradlew run
如果项目没有gradlew文件,先执行gradle wrapper生成,再用上述命令。
适配Gradle 7.x语法
除了替换testCompile为testImplementation、<<为doLast,还需完成以下语法更新:
- 将
compile替换为implementation - 将
runtime替换为runtimeOnly - 确保
apply plugin或plugins块符合Gradle 7.x规范(旧版apply plugin: 'java'可保留)
排查非零退出值错误
执行./gradlew run --stacktrace获取详细错误日志,non-zero exit value 1通常是代码逻辑问题(如API密钥配置错误、依赖缺失),可通过日志定位具体原因。
3. 验证流程
- 确认
build.gradle已完成语法适配并添加JVM参数 - 执行
./gradlew clean build完成项目构建 - 用
./gradlew run直接运行,或用带参数的Java命令运行构建好的JAR包
内容的提问来源于stack exchange,提问作者Omega
相关产品推荐
相关产品推荐

