如何在GitHub Actions工作流中运行构建生成的JAR包?
解决GitHub Actions中JAR运行失败及上传结果到Google Bucket的方案
先搞定JAR运行的问题
你当前的运行命令存在几个关键问题:
- 命令大小写错误:Linux环境下Java命令是小写的
java,不是Java - JAR路径错误:Gradle构建生成的JAR默认存放在项目根目录的
build/libs/子文件夹中,直接写文件名会导致找不到文件 - 无效的cd命令:每个
run步骤都是独立的shell会话,单独的cd命令仅在当前步骤生效,后续步骤会回到默认工作目录
修正后的JAR运行步骤
在构建完成后,添加以下步骤运行JAR并将输出保存到文件:
- name: 运行JAR并保存输出 run: | # 可选:确认JAR文件位置,用于调试 ls -la build/libs/ # 运行JAR,将输出写入result.txt文件 java -jar build/libs/hello-world-0.1.0.jar > result.txt
处理上传结果到Google Bucket的需求
使用Google官方提供的Action完成上传操作最可靠,步骤如下:
- 将你的Google Cloud服务账号密钥存储在GitHub仓库的Secrets中,命名为
GCP_SERVICE_ACCOUNT_KEY - 在工作流中添加上传步骤:
- name: 上传结果到Google Bucket uses: google-github-actions/upload-cloud-storage@v1 with: credentials: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }} path: ./result.txt destination: your-bucket-name/results/ # 替换为你的Bucket实际路径 parent: false
完整的工作流代码
name: demo on: push: branches: - 'pipeline-dev' jobs: conditional_step: runs-on: 'ubuntu-20.04' steps: - uses: actions/checkout@v3 with: repository: hello-world-with-gradle - uses: actions/setup-java@v3 with: distribution: temurin java-version: 8 - name: Setup Gradle uses: gradle/gradle-build-action@v2 - name: Execute Gradle build run: ./gradlew build - name: 运行JAR并保存输出 run: | ls -la build/libs/ java -jar build/libs/hello-world-0.1.0.jar > result.txt - name: 上传结果到Google Bucket uses: google-github-actions/upload-cloud-storage@v1 with: credentials: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }} path: ./result.txt destination: your-bucket-name/results/ parent: false
备选方案(若JAR仍无法运行)
如果上述方法仍无法运行JAR,可以尝试以下途径:
- 检查JAR是否为可执行包:运行
jar tf build/libs/hello-world-0.1.0.jar,确认存在META-INF/MANIFEST.MF文件且其中包含Main-Class属性 - 直接使用Gradle的run任务:如果项目已配置
run任务,可直接执行./gradlew run > result.txt,跳过手动运行JAR的步骤 - 验证Java环境:在运行JAR前添加
run: java -version步骤,确认Java版本与项目要求一致
内容的提问来源于stack exchange,提问作者Mohit
相关产品推荐
相关产品推荐

