我有一个 Java 项目作为多模块 gradle 项目,如下所示。
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
步骤
Build and analyze
失败并出现以下错误:
Error: Could not find or load main class org.gradle.wrapper.GradleWrapperMain
Caused by: java.lang.ClassNotFoundException: org.gradle.wrapper.GradleWrapperMain
经常提到的在
gradle/wrapper
中提交文件的解决方案并不能解决问题,因为它们已经提交并在 .gitignore
中被明确排除。
经过长时间的搜索,一位同事找到了问题的解决方案。
项目中提交了
.gitattributes
文件。其中,*.jar
文件被配置为 Git LFS 文件。
*.jar filter=lfs diff=lfs merge=lfs -text
由于合并,
gradle-wrapper.jar
文件被破坏并且无法再读取。
删除
*.jar
文件的配置并重新创建 gradle-wrapper.jar 后,./gradlew
现在可以正常使用。