跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

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

基于 Maven 和 Docker 实现 Java Web 应用打包与部署的流程涉及多模块工程构建、JAR 包定位、镜像构建及服务器部署。首先利用 IDEA Maven 面板执行 clean 和 package 命令生成产物,确认 JAR 位于 admin 模块 target 目录下。接着将 JAR 包搬运至 Docker 构建目录并规范命名,若遇到基础镜像拉取失败,可通过加载本地 tar 包并修改标签的方式绕过。最终通过 docker build 构建镜像,在服务器上加载镜像并使用 docker compose 启动服务,配合日志命令验证运行状态。关键在于理清各阶段文件路径与依赖关系。

蜜桃汽水发布于 2026/3/15更新于 2026/9/1282 浏览

背景说明

在实际项目开发中,代码完成并不等同于可以上线。尤其是 Java Web 项目,往往涉及多模块 Maven 工程、WebApp 主模块、Docker 镜像封装以及离线或内网服务器部署。

常见问题包括:

  • IDEA 中代码修改后,Docker 容器内运行的仍是旧代码
  • Maven 打包生成的 JAR 包路径不明确
  • Docker build 过程中基础镜像拉取失败
  • 服务器更新代码时操作繁琐

本文以 PowerGrid 项目为例,介绍如何将最新 Java Web 代码稳定、可控地打包成 Docker 镜像,并部署到服务器运行。

项目整体结构说明

在开始之前,需明确关键目录结构(以 PowerGrid 项目为例):

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。中间步骤涉及文件的搬运与覆盖。

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

为什么一定要用 Maven Lifecycle?

项目为多模块 Maven 工程,若仅对单个模块打包,可能导致依赖缺失或版本不一致。正确做法是从根模块统一打包。

IDEA 中的具体操作步骤

  1. 打开 Maven 面板:在 IDEA 右侧点击 Maven 面板。
  2. 执行 clean:双击 Lifecycle → clean,清空历史编译产物,避免旧代码污染新包。
  3. 执行 package:clean 完成后,双击 Lifecycle → package。若担心测试失败,可点击 ⚡ Skip Tests。
  4. 确认打包成功:控制台显示 [INFO] BUILD SUCCESS 且所有模块均为 SUCCESS。

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

JAR 位置

Maven 打包完成后,真正要运行的 JAR 位于:

powergrid-admin/target/

通常命名为 powergrid-admin.jar。

为什么是 admin 模块?

admin 是 Spring Boot 启动模块,其他模块仅为被依赖项。Docker 运行的是该模块的 JAR。

第三阶段:覆盖 Docker 使用的 JAR

Docker 只认一个名字

查看 webapp/Dockerfile,通常会看到类似配置:

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

这意味着 Docker 构建时只会查找名为 powergrid-admin.jar 的文件。

正确覆盖步骤

  1. 复制新生成的 JAR:powergrid-admin/target/powergrid-admin-3.8.9.jar
  2. 粘贴到 Docker 目录:powergrid-docker/webapp/
  3. 删除旧文件
  4. 重命名为:powergrid-admin.jar

常见错误包括未改名、放错目录或覆盖失败,这会导致 Docker 运行旧代码。

第四阶段:Docker 构建镜像

进入 webapp 目录(Windows 示例):

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

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

问题本质

本地没有 openjdk:8-jdk 镜像,或镜像源返回 403 错误,而 Dockerfile 强依赖该基础镜像。

解决思路:移花接木

  1. 加载旧镜像:
docker load -i ..\exported_images\powergrid-docker-webapp.tar
  1. 查看镜像:
docker images
  1. 改名伪装:
docker tag powergrid-docker-webapp:latest openjdk:8-jdk
  1. 重新 build:
docker build -t powergrid-docker-webapp .

此时 Dockerfile 会认为已找到基础镜像。

第五阶段:服务器部署

传输镜像

将新的 powergrid-docker-webapp.tar 上传至服务器。

加载镜像

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

重启服务

docker compose up -d

查看日志

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 本身,而在于清楚每一步产物的位置、使用者及更新时机。理解这一点后,更换服务器、项目或镜像源均可举一反三。

目录

  1. 背景说明
  2. 项目整体结构说明
  3. 第一阶段:使用 IDEA + Maven 正确打包项目
  4. 为什么一定要用 Maven Lifecycle?
  5. IDEA 中的具体操作步骤
  6. 第二阶段:找到真正要用的 JAR 包
  7. JAR 位置
  8. 为什么是 admin 模块?
  9. 第三阶段:覆盖 Docker 使用的 JAR
  10. Docker 只认一个名字
  11. 正确覆盖步骤
  12. 第四阶段:Docker 构建镜像
  13. Docker 构建失败处理:openjdk:8-jdk 拉不下来怎么办?
  14. 问题本质
  15. 解决思路:移花接木
  16. 第五阶段:服务器部署
  17. 传输镜像
  18. 加载镜像
  19. 重启服务
  20. 查看日志
  21. 完整流程总结
  22. 总结

更多推荐文章

查看全部
  • VSCode Copilot 登录失败常见原因与解决方案
  • 为什么 Prompt 能决定大语言模型输出质量?
  • Python 调用高德地图 MCP 服务查询天气示例
  • 知网 AIGC 检测算法升级规则解读及应对策略
  • Linux 进程地址空间详解
  • 算法基础篇:一维差分专题与实战应用
  • 图算法在 Neo4j 中的大数据分析应用
  • 双延迟深度确定性策略梯度算法 (TD3) 详解
  • Polar CTF Web 简单题目解题思路总结
  • Milvus 实战:Attu 可视化安装与 Python 整合
  • RocketMQ 5.0 延时消息架构:时间轮算法与分布式调度实践
  • CentOS 系统定时执行 Python 邮件发送任务的五种方案
  • 跑通本地知识库:Chroma + Ollama + Llama 3.1 实操记录
  • Java WebSocket 原理、实现与核心特性解析
  • OpenClaw Dashboard 无法登录:systemd 缺失导致 Gateway 未启动
  • 特征分解:线性代数在 AI 大模型中的核心工具
  • 农业机器人自主导航与 5 大核心路径规划算法解析
  • LangChain v1.0 中间件机制:AI Agent 上下文控制指南
  • 基于 DeepSeek 与 Cursor 构建智能代码审查工具实战
  • 基于 AWS EC2 部署 ClawdBot 自建 AI 助手

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online