云计算百科
云计算领域专业知识百科平台

基于 Maven + Docker 的 WebApp 打包与部署

一、背景说明:为什么要这么折腾一套 Maven + Docker 流程?

在实际项目开发中,代码写完 ≠ 可以上线。尤其是 Java Web 项目,往往涉及:

  • 多模块 Maven 工程

  • WebApp 主模块

  • Docker 镜像封装

  • 离线/内网服务器部署

很多同学在这个阶段会遇到几个典型问题:

  • IDEA 里代码改好了,但 Docker 里跑的还是旧代码

  • Maven 打包出来的 JAR 不知道该用哪个

  • Docker build 一直卡在 openjdk 镜像拉取

  • 服务器上更新一次代码,要手动搞半天

  • 本文将严格按照你当前 powergrid 项目的真实流程,从 IDEA 打包开始,一步一步,完整讲清楚:

    如何把最新 Java Web 代码,稳定、可控地打包成 Docker 镜像,并部署到服务器运行。


    二、项目整体结构说明(先搞清楚你在操作什么)

    在开始之前,我们先明确几个关键目录(非常重要,比如我的项目):

    com.powergrid
    ├── powergrid-admin # Web 主程序(真正运行的模块)
    ├── powergrid-common # 公共模块
    ├── powergrid-framework # 框架模块
    ├── …

    powergrid-docker
    ├── webapp
    │ ├── Dockerfile
    │ ├── powergrid-admin.jar # Docker 实际使用的 JAR
    │ └── …
    ├── exported_images
    │ └── powergrid-docker-webapp.tar

    一句话记忆法:

    👉 Maven 在 powergrid-admin/target 里产出 JAR 👉 Docker 只认 powergrid-docker/webapp 里的 JAR

    中间这一步「搬运 + 覆盖」,就是 90% 人出问题的地方。


    三、第一阶段:使用 IDEA + Maven 正确打包项目

    3.1 为什么一定要用 Maven Lifecycle?

    你的项目是一个 多模块 Maven 工程,如果你只单独对某个模块打包:

    • 很可能依赖没编全

    • 很可能版本不一致

    正确做法:从根模块统一打包。


    3.2 IDEA 中的具体操作步骤(图形化)

    第一步:打开 Maven 面板

    在 IDEA 右侧,点击 Maven 面板,你会看到类似:

    powergrid
    ├── Lifecycle
    │ ├── clean
    │ ├── package
    │ ├── install

    ⚠️ 注意:

    • 请选择最顶层的 powergrid(不是 admin)


    第二步:执行 clean

    • 双击 Lifecycle → clean

    • 作用:清空历史编译产物

    这是一个好习惯,避免旧代码污染新包。


    第三步:执行 package

    • clean 完成后

    • 双击 Lifecycle → package

    如果你担心测试失败:

    👉 点击 Maven 面板上的 ⚡ Skip Tests


    第四步:确认打包成功

    控制台看到以下内容,说明成功:

    [INFO] BUILD SUCCESS
    [INFO] Finished at: xxxx

    并且所有模块都是 SUCCESS。


    四、第二阶段:找到真正要用的 JAR 包

    4.1 JAR 在哪里?(重点)

    Maven 打包完成后:

    • 真正要运行的 JAR 一定在:

    powergrid-admin/target/

    你会看到类似:

    powergrid-admin.jar


    4.2 为什么是 admin 模块?

    因为:

    • admin 是 Spring Boot 启动模块

    • 其他模块只是被依赖

    Docker 运行的就是它。


    五、第三阶段:覆盖 Docker 使用的 JAR(最关键)

    5.1 Docker 只认一个名字

    查看 webapp/Dockerfile,你会看到类似:

    COPY powergrid-admin.jar /app/app.jar

    ⚠️ 这意味着:

    Docker 只会找 powergrid-admin.jar


    5.2 正确覆盖步骤(一步都不能错)

    1️⃣ 复制新生成的 JAR

    powergrid-admin/target/powergrid-admin-3.8.9.jar

    2️⃣ 粘贴到 Docker 目录

    powergrid-docker/webapp/

    3️⃣ 删除旧文件

    4️⃣ 重命名为:

    powergrid-admin.jar


    5.3 常见错误(踩坑警告)

    ❌ 没改名 ❌ 放错目录 ❌ 覆盖失败

    结果:Docker 跑的还是旧代码。


    六、第四阶段:Docker 构建镜像

    进入 webapp 目录:

    cd D:\\com.powergrid\\java\\powergrid-docker\\webapp\\

    执行构建:

    docker build -t powergrid-docker-webapp .


    七、Docker 构建失败:openjdk:8-jdk 拉不下来怎么办?

    这是你这个环境非常典型的问题。

    7.1 问题本质

    • 本地没有 openjdk:8-jdk

    • 镜像源 403

    • Dockerfile 又强依赖


    7.2 解决思路:移花接木(非常实用)

    第一步:加载旧镜像

    docker load -i ..\\exported_images\\powergrid-docker-webapp.tar

    第二步:查看镜像

    docker images

    第三步:改名伪装

    docker tag powergrid-docker-webapp:latest openjdk:8-jdk

    第四步:重新 build

    docker build -t powergrid-docker-webapp .

    Dockerfile 会“以为”自己找到了基础镜像。


    八、第五阶段:服务器部署(三板斧)

    8.1 传输镜像

    把新的 powergrid-docker-webapp.tar 传到服务器。


    8.2 加载镜像

    docker load -i exported_images/powergrid-docker-webapp.tar


    8.3 重启服务

    docker compose up -d


    8.4 查看日志

    docker logs -f –tail=100 powergrid-docker-webapp


    九、完整流程总结(必背)

    IDEA

    Maven clean

    Maven package

    powergrid-admin/target/*.jar
    ↓(复制 + 重命名)
    powergrid-docker/webapp/powergrid-admin.jar

    docker build

    docker load

    docker compose up -d


    十、结语

    这套流程的核心不是 Docker,也不是 Maven,而是:

    你是否清楚每一步“产物在哪里、被谁用、什么时候更新”。

    只要你理解了这一点:

    • 换服务器

    • 换项目

    • 换镜像源

    你都能举一反三。

     

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 基于 Maven + Docker 的 WebApp 打包与部署
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!