You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何多次运行相同GitHub Actions任务并单独上传Gradle子项目产物

解决GitHub Actions上传Gradle多子项目Jar的路径问题

问题原因

你当前的upload-artifact配置会保留Jar文件的相对目录结构,导致上传后Jar被放在对应子项目的路径下,而非平级展示。

方案1:平级上传所有Jar到同一个Artifact

只需添加flat: true参数,即可忽略原路径,将所有Jar文件直接放在Artifact根目录:

- uses: actions/upload-artifact@v3
  with:
    name: Artifacts
    path: project*/build/libs/*.jar
    flat: true

方案2:每个子项目Jar单独上传为独立Artifact(适配未来新增子项目)

如果需要将每个子项目的Jar作为独立Artifact上传,同时避免重复编写任务,可采用以下两种方式:

方式A:使用矩阵遍历预定义子项目

提前列出子项目,后续新增时只需在矩阵中添加名称:

jobs:
  upload-subproject-jars:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        subproject: [sub1, sub2] # 新增子项目直接追加到这里
    steps:
      - uses: actions/upload-artifact@v3
        with:
          name: ${{ matrix.subproject }}-jar
          path: project/${{ matrix.subproject }}/build/libs/*.jar
          flat: true

方式B:动态识别子项目并上传

适合子项目数量不确定的场景,自动扫描project目录下的子项目:

jobs:
  upload-subproject-jars:
    runs-on: ubuntu-latest
    steps:
      - name: 扫描子项目列表
        id: list-subprojects
        run: |
          # 提取project目录下的所有一级子目录名称
          SUBPROJECTS=$(find project -maxdepth 1 -type d ! -name project | xargs basename | jq -R . | jq -s .)
          echo "subprojects=${SUBPROJECTS}" >> $GITHUB_OUTPUT
      - name: 上传子项目Jar
        uses: actions/upload-artifact@v3
        with:
          name: ${{ matrix.subproject }}-jar
          path: project/${{ matrix.subproject }}/build/libs/*.jar
          flat: true
        strategy:
          matrix:
            subproject: ${{ fromJSON(steps.list-subprojects.outputs.subprojects) }}

内容的提问来源于stack exchange,提问作者Elikill58

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 17:55:18