多模块Gradle项目GitHub Action构建报错:找不到GradleWrapperMain类
Gradle Wrapper在GitHub Action中找不到主类org.gradle.wrapper.GradleWrapperMain
项目结构
rootproject ├── subproject1 │ └── src/main/java ├── subproject2 │ └── src/main/java ├── subproject3 │ └── src/main/java │ ├── build.gradle ├── gradlew ├── gradlew.bat ├── settings.gradle └── gradle └── wrapper ├── gradle-wrapper.jar └── gradle-wrapper.properties
GitHub Action配置
name: CI on: push: branches: - '*' concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: build: name: CI-Build runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - uses: actions/setup-java@v4 with: java-version: 17 distribution: 'temurin' - name: Build and analyze run: | ./gradlew clean build
遇到的错误
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain Caused by: java.lang.ClassNotFoundException: org.gradle.wrapper.GradleWrapperMain
已确认gradle/wrapper目录下的文件已提交且未被.gitignore忽略,但问题仍存在。
可能的解决方案
验证gradle-wrapper.jar的完整性
提交的jar文件可能损坏,本地重新生成Gradle Wrapper后再提交:# 替换为你项目使用的Gradle版本 ./gradlew wrapper --gradle-version 7.6.1生成后本地执行
./gradlew clean build确认能正常运行,再提交更新后的wrapper文件。检查GitHub Action中文件拉取情况
在checkout步骤后添加验证命令,确认gradle-wrapper.jar存在且大小正常:- name: Verify wrapper files run: | ls -la gradle/wrapper/ du -h gradle/wrapper/gradle-wrapper.jar如果文件不存在或大小异常,说明checkout步骤存在问题,可尝试更换
actions/checkout版本或检查仓库权限。修复gradlew脚本的换行符问题
Ubuntu环境不兼容Windows格式的CRLF换行符,可在Action中转换脚本格式:- name: Fix gradlew line endings run: dos2unix gradlew或者在项目根目录添加
.gitattributes文件,强制脚本使用LF换行:gradlew text eol=lf gradlew.bat text eol=crlf提交该文件后重新触发Action。
确认Gradle与Java版本兼容性
查看gradle/wrapper/gradle-wrapper.properties中的distributionUrl,确认对应的Gradle版本支持Java 17。例如Gradle 7.0+才支持Java 17,如果使用的是旧版本,需要升级Gradle或降低Java版本。清理Gradle缓存
GitHub Action中缓存的Gradle文件可能损坏,执行构建前清理缓存:- name: Clean Gradle wrapper cache run: rm -rf $HOME/.gradle/wrapper/dists/
内容的提问来源于stack exchange,提问作者tgallei
相关产品推荐
相关产品推荐

