GitHub Action使用Maven构建JAR时Dockerfile找不到target目录JAR问题求助
故障根因
报错核心是Docker构建过程无法读取到GitHub Runner上Maven构建生成的target目录及对应JAR包,触发原因有两个:
docker/build-push-action未显式指定构建上下文,导致Docker构建时没有加载Runner当前工作目录下刚生成的target目录- Maven打包默认会执行测试用例,测试失败时会终止构建,不会生成target目录和JAR包
解决方案
方案1:复用现有工作流的Maven缓存(构建速度更快)
- 调整Maven构建命令,跳过测试避免构建中断
将Build with Maven步骤的运行命令修改为:mvn clean package -DskipTests - 补充docker/build-push-action的上下文配置
修正后的Build and push to local registry步骤配置如下:- name: Build and push to local registry uses: docker/build-push-action@v2 with: context: . file: ./Dockerfile push: true tags: bi.nti.co.id/vqube/neural_bi_vqube:latest - 可选:添加JAR包校验步骤
在Maven构建后、Docker构建前添加校验步骤,确认JAR包已生成且名称匹配:- name: Verify JAR exists run: | ls -la target/ ls target/visual_query_builder-0.0.1-SNAPSHOT.jar
方案2:Docker多阶段构建(环境一致性更高)
直接修改Dockerfile,将JAR构建逻辑集成到镜像构建流程中,彻底避免工作流和Docker构建上下文不一致的问题,修正后的Dockerfile如下:
# 构建阶段:完成依赖下载和JAR打包 FROM maven:3.8.6-openjdk-11-slim AS builder WORKDIR /build COPY pom.xml . RUN mvn dependency:go-offline -DskipTests COPY src ./src RUN mvn clean package -DskipTests # 运行阶段:仅保留运行所需的JRE环境和JAR包 FROM openjdk:11-jdk-slim EXPOSE 8888 WORKDIR / COPY --from=builder /build/target/visual_query_builder-0.0.1-SNAPSHOT.jar . ENTRYPOINT ["java","-jar","/visual_query_builder-0.0.1-SNAPSHOT.jar"]
采用该方案可以直接删除工作流中JDK安装、Maven缓存、Maven构建相关步骤,所有构建逻辑都在Dockerfile内完成,不会受工作流环境变动影响。
内容的提问来源于stack exchange,提问作者Karo Karo
相关产品推荐
相关产品推荐

