执行Main.main()时Gradle任务失败,但build任务成功求助
问题描述
运行Main.main()时遇到两个问题:
- 构建提示使用了与Gradle 9.0不兼容的已弃用特性
:Main.main()任务执行失败,错误提示:Process 'command 'C:\Program Files\Java\jdk-21\bin\java.exe'' finished with non-zero exit value 1
添加--stack-trace后的详细日志:
任务':Main.main()'执行失败。
进程'命令'C:\Program Files\Java\jdk-21\bin\java.exe''以非零退出值1结束 *
尝试:
使用--info或--debug选项获取更多日志输出。
使用--scan获取完整分析信息。
访问Gradle帮助页面获取更多帮助。
- 异常信息:
org.gradle.api.tasks.TaskExecutionException: 任务':Main.main()'执行失败。
Caused by: org.gradle.process.internal.ExecException: 进程'命令'C:\Program Files\Java\jdk-21\bin\java.exe''以非零退出值1结束
构建使用了已弃用的Gradle特性,与Gradle 9.0不兼容。
可使用'--warning-mode all'查看单个弃用警告,确定其来自脚本还是插件。
更多信息请参考Gradle文档中命令行警告相关章节。
构建失败,耗时1秒 2个可执行任务:1个已执行,1个已是最新状态
但执行./gradlew build时构建完全成功:
$ ./gradlew build
构建成功,耗时4秒
2个可执行任务:2个已执行
<-------------> 0% 等待空闲
当前build.gradle配置:
plugins { id 'java' } java { sourceCompatibility = JavaVersion.VERSION_21 } group = 'org.example' version = '1.0-SNAPSHOT' repositories { mavenCentral() } dependencies { testImplementation platform('org.junit:junit-bom:5.9.1') testImplementation 'org.junit.jupiter:junit-jupiter' } test { useJUnitPlatform() } project.ext.lwjglVersion = "3.3.3" project.ext.jomlVersion = "1.10.5" project.ext.lwjglNatives = "natives-windows" dependencies { implementation platform("org.lwjgl:lwjgl-bom:$lwjglVersion") implementation "org.lwjgl:lwjgl" implementation "org.lwjgl:lwjgl-assimp" implementation "org.lwjgl:lwjgl-glfw" implementation "org.lwjgl:lwjgl-nfd" implementation "org.lwjgl:lwjgl-openal" implementation "org.lwjgl:lwjgl-opengl" implementation "org.lwjgl:lwjgl-stb" runtimeOnly "org.lwjgl:lwjgl::$lwjglNatives" runtimeOnly "org.lwjgl:lwjgl-assimp::$lwjglNatives" runtimeOnly "org.lwjgl:lwjgl-glfw::$lwjglNatives" runtimeOnly "org.lwjgl:lwjgl-nfd::$lwjglNatives" runtimeOnly "org.lwjgl:lwjgl-openal::$lwjglNatives" runtimeOnly "org.lwjgl:lwjgl-opengl::$lwjglNatives" runtimeOnly "org.lwjgl:lwjgl-stb::$lwjglNatives" implementation "org.joml:joml:${jomlVersion}" }
问题分析
build成功但Main.main()失败,说明编译环节无问题,错误出在程序运行阶段。非零退出值1通常由以下原因导致:程序抛出未捕获异常、运行时依赖缺失、Main类配置错误,或原生库加载失败。Gradle弃用警告是独立问题,并非当前运行失败的直接原因。
解决步骤
1. 获取程序运行时的具体错误日志
Gradle默认只提示进程退出状态,未输出程序本身的报错。执行以下命令获取详细运行日志:
./gradlew run --info
或直接在IDE中运行Main类,查看控制台的完整异常栈——这是定位问题的核心步骤。
2. 检查LWJGL原生库配置
你的配置指定了natives-windows,需确认:
- 当前系统确实是Windows(若为Linux/macOS,需替换为
natives-linux或natives-macos) - 原生库已正确加入运行时类路径,可通过以下命令验证:
./gradlew dependencies --configuration runtimeClasspath
3. 配置Gradle的application插件(推荐)
为避免手动运行Main类的类路径问题,在build.gradle中添加application插件并指定主类:
plugins { id 'java' id 'application' // 添加此插件 } // 指定你的Main类全限定名 application { mainClass = 'org.example.Main' }
之后执行./gradlew run即可启动程序,Gradle会自动处理类路径和依赖加载。
4. 修复Gradle弃用警告(可选但建议)
执行以下命令查看具体弃用项,根据提示修改build.gradle:
./gradlew run --warning-mode all
5. 验证JDK兼容性
确认LWJGL 3.3.3与JDK 21的兼容性,若存在问题,可尝试降级到JDK 17测试。
总结
优先通过--info参数或IDE运行获取程序本身的报错信息,这是解决非零退出值1的关键。Gradle弃用警告可后续针对性修复,不影响当前程序运行问题的排查。
内容的提问来源于stack exchange,提问作者Mahadi Dwi Nugraha

