咱们给项目装了 “黑匣子” 和 “显微镜”,能查问题、调 bug,但项目始终 “困在” 你的 IDEA 里 —— 想发给同事演示,传一堆代码文件对方还跑不起来;想部署到公司服务器让全部门用,更是不知道从哪下手。
这就像奶茶店只在店里做奶茶,客人不能外带,生意永远做不大。今天这篇,咱们教你把 Java 项目 “装瓶打包” 成独立的包,既能在自己电脑双击运行,也能部署到 Windows/Linux 服务器,真正实现 “写好的项目能落地、能共用”。
jar
一、先搞懂:为什么要 “打包部署”?(奶茶外带的类比)
先跟你掰扯清楚 “打包部署” 的核心价值,新手常觉得 “在 IDEA 里能跑就行”,但实际工作中这远远不够:
本地打包:把项目从 “IDEA 工程文件” 变成 “独立 jar 包”,就像奶茶从 “店里的制作杯” 装成 “密封外带杯”,不用带整个奶茶店,拿着杯子就能喝;服务器部署:把 jar 包放到专门的服务器上运行,就像奶茶店开 “分店”,所有人都能通过网络访问(比如同事输入就能查图书),不用挤在你电脑上用。
http://服务器IP:8080/book/list
新手打包部署常踩的 3 个坑,提前给你打预防针:
打出来的 jar 包 “没主类”,双击没反应,像外带杯没装奶茶;服务器上没装 JDK,jar 包跑不起来,像分店没通电;项目配置没改,服务器上的 jar 包还连本地 MySQL,导致数据库连接失败,像外带奶茶没放吸管,喝不了。
二、第一部分:本地打包 —— 把项目变成 “可外带的 jar 包”
Spring Boot 项目打包比传统 Java 项目简单太多,核心靠插件,能自动把项目依赖(比如 MyBatis-Plus、Lombok)和主类信息打包进去,生成 “可直接运行的 jar 包”。
spring-boot-maven-plugin
步骤 1:配置 pom.xml—— 给 “外带杯” 装核心零件
打开项目的,确认两个关键配置(没有就加上),这是打可执行 jar 包的前提:
pom.xml
xml
<!-- 1. 父依赖:Spring Boot打包的基础,必须有 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.10</version> <!-- 和之前保持一致,别乱改 -->
</parent>
<!-- 2. Spring Boot打包插件:核心!负责把项目打成可执行jar包 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.7.10</version>
<configuration>
<!-- 指定主类(启动类的全路径,避免打出来的jar没主类) -->
<mainClass>com.example.bookmanage.BookManageApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal> <!-- 重打包,生成可执行jar -->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
🔍 图示 1:pom.xml 打包配置关键区域示意图
| 配置项 | 作用说明 | 界面标注 |
|---|---|---|
|
提供打包默认配置,不用自己写复杂插件 | 父依赖节点,通常在 pom.xml 最顶部 |
|
核心打包插件,生成可执行 jar | build→plugins 节点下,需指定 mainClass |
|
告诉 jar 包 “启动时执行哪个类” | configuration 节点内,路径要和启动类完全一致 |
步骤 2:IDEA 打包操作 ——“密封外带杯” 的 3 步流程
打包不用记命令,IDEA 右侧有可视化的 Maven 面板,跟着点就行:
清理项目:展开右侧 “Maven” 面板→→
book-manage-system→双击
Lifecycle,清除之前的编译文件(避免旧文件干扰);编译项目:双击
clean,把 Java 代码编译成 class 文件(像奶茶店把原料煮好);打包生成 jar:双击
compile,Maven 会自动打包,成功后控制台会显示 “BUILD SUCCESS”。
package
🔍 图示 2:IDEA Maven 打包步骤示意图
| 步骤 | 操作路径 | 成功标志 |
|---|---|---|
| 1. 清理 | Maven→Lifecycle→clean | 控制台输出 “BUILD SUCCESS”,target 目录清空 |
| 2. 编译 | Maven→Lifecycle→compile | target→classes 目录生成 class 文件 |
| 3. 打包 | Maven→Lifecycle→package | target 目录生成(jar 包) |
步骤 3:找到并测试 jar 包 ——“外带奶茶” 能不能喝?
打包成功后,jar 包在下,名字通常是
项目根目录/target(比如
artifactId-version.jar),接下来测试它能不能独立运行:
book-manage-1.0-SNAPSHOT.jar
方式 1:双击运行(适合 Windows 本地)
直接双击 jar 包 —— 如果弹出黑窗口,显示 “Started BookManageApplication in X seconds”,说明运行成功;⚠️ 注意:如果双击没反应,打开命令提示符(CMD),进入 jar 包所在目录,执行,查看报错信息(通常是没装 JDK 或 JDK 环境变量没配)。
java -jar book-manage-1.0-SNAPSHOT.jar
方式 2:命令行运行(Windows/Linux 通用)
打开 CMD(Windows)或终端(Linux),进入 jar 包目录:
bash
# Windows示例:进入D盘的jar包目录
cd D:JavaProjectsook-manage-system arget
执行运行命令:
bash
java -jar book-manage-1.0-SNAPSHOT.jar
测试接口:打开浏览器,输入,能看到图书列表,说明 jar 包运行正常!
http://localhost:8080/book/list
🔍 图示 3:jar 包命令行运行效果示意图
bash
# 命令行输入
D:JavaProjectsook-manage-system arget>java -jar book-manage-1.0-SNAPSHOT.jar
# 控制台输出(成功标志)
. ____ _ __ _ _
/ / ___'_ __ _ _(_)_ __ __ _
( ( )___ | '_ | '_| | '_ / _` |
/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |___, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.7.10)
2025-10-15 10:00:00.000 INFO 1234 --- [ main] c.e.b.BookManageApplication : Starting BookManageApplication v1.0-SNAPSHOT using Java 1.8.0_381 on DESKTOP-XXXX with PID 1234
2025-10-15 10:00:00.001 INFO 1234 --- [ main] c.e.b.BookManageApplication : No active profile set, falling back to 1 default profile: "default"
2025-10-15 10:00:02.123 INFO 1234 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2025-10-15 10:00:02.134 INFO 1234 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-10-15 10:00:02.134 INFO 1234 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.78]
2025-10-15 10:00:02.345 INFO 1234 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-10-15 10:00:02.345 INFO 1234 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2200 ms
2025-10-15 10:00:03.567 INFO 1234 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2025-10-15 10:00:03.890 INFO 1234 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2025-10-15 10:00:04.123 INFO 1234 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2025-10-15 10:00:04.134 INFO 1234 --- [ main] c.e.b.BookManageApplication : Started BookManageApplication in 4.567 seconds (JVM running for 5.123)
三、第二部分:服务器部署 —— 把 “外带奶茶” 放到 “分店”(Windows/Linux 双场景)
本地跑通还不够,要让其他人也能访问,得把 jar 包部署到服务器。下面分 “Windows 服务器”(新手入门)和 “Linux 服务器”(企业常用)两种场景,都是实战步骤。
场景 1:Windows 服务器部署(简单易上手)
适合新手练手,比如用公司的 Windows 电脑当临时服务器:
步骤 1:准备服务器环境
装 JDK:和本地装 JDK 步骤一样,注意配置环境变量,执行
JAVA_HOME能显示版本就对了;装 MySQL:如果服务器需要独立数据库(不连本地 MySQL),就装 MySQL,创建
java -version库,执行之前的
book_db表 SQL;改项目配置:本地
book的数据库地址是
application.yml,服务器上要改:
localhost
yaml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
# 服务器MySQL地址:如果MySQL和jar包在同一台服务器,填localhost;不在同一台,填MySQL服务器IP
url: jdbc:mysql://localhost:3306/book_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username: root # 服务器MySQL用户名
password: 123456 # 服务器MySQL密码
改完后重新打包,生成新的 jar 包。
步骤 2:上传 jar 包到服务器
用 Windows 自带的 “远程桌面连接”(Win+R 输入)登录服务器,把新 jar 包复制到服务器的目录(比如
mstsc)。
D:java-projects
步骤 3:后台运行 jar 包(避免关闭窗口就停止)
双击 jar 包会弹出黑窗口,关闭窗口项目就停了,用命令行让它后台运行:
打开 CMD,进入 jar 包目录:
bash
cd D:java-projects
执行后台运行命令(创建 bat 脚本,双击运行):新建文件,内容如下:
start.bat
bat
@echo off
# 后台运行jar包,日志输出到book-log.txt
start javaw -jar book-manage-1.0-SNAPSHOT.jar > book-log.txt 2>&1
echo 项目已启动,日志在book-log.txt
pause
双击,会弹出 CMD 窗口提示 “项目已启动”,关闭窗口不影响项目运行。
start.bat
步骤 4:测试访问
在自己电脑的浏览器输入 “服务器 IP:8080/book/list”(比如),能看到图书列表,说明部署成功!
http://192.168.1.100:8080/book/list
场景 2:Linux 服务器部署(企业级实战,以 CentOS 为例)
企业常用 Linux 服务器(稳定、占用资源少),核心是 “用命令行操作”,步骤如下:
步骤 1:准备服务器环境
装 JDK:
bash
# 1. 查看可安装的JDK版本
yum search java-1.8.0-openjdk
# 2. 安装JDK 1.8
yum install -y java-1.8.0-openjdk-devel.x86_64
# 3. 验证安装:显示java version "1.8.0_xxx"即成功
java -version
装 MySQL:用 Docker 装 MySQL(简单快捷,避免复杂配置):
bash
# 1. 安装Docker(如果没装)
yum install -y docker
systemctl start docker
systemctl enable docker
# 2. 拉取MySQL 8.0镜像
docker pull mysql:8.0
# 3. 启动MySQL容器(设置密码123456,映射端口3306)
docker run -d --name mysql-book -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
# 4. 进入容器,创建book_db库
docker exec -it mysql-book mysql -uroot -p123456
# 5. 在MySQL命令行执行建库建表SQL
create database book_db;
use book_db;
# 粘贴之前的book表SQL...
改项目配置:和 Windows 服务器一样,改的数据库地址为 Linux 服务器 IP(比如
application.yml),重新打包。
192.168.1.101
步骤 2:上传 jar 包到 Linux 服务器
用 Xftp(可视化工具)连接 Linux 服务器,把 jar 包上传到目录(没有就用
/home/java-projects/创建)。
mkdir -p /home/java-projects
步骤 3:后台运行 jar 包(nohup 命令)
Linux 下用命令让 jar 包后台运行,关闭终端不停止:
nohup
bash
# 1. 进入jar包目录
cd /home/java-projects
# 2. 后台运行jar包,日志输出到nohup.out
nohup java -jar book-manage-1.0-SNAPSHOT.jar &
# 3. 查看日志,确认启动成功
tail -f nohup.out
看到 “Started BookManageApplication in X seconds”,说明启动成功,按退出日志查看。
Ctrl+C
步骤 4:开放服务器端口(关键!否则访问不到)
Linux 默认防火墙会拦截 8080 端口,要开放端口:
bash
# 1. 开放8080端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 2. 重新加载防火墙规则
firewall-cmd --reload
# 3. 验证端口是否开放:显示yes即成功
firewall-cmd --zone=public --query-port=8080/tcp
🔍 图示 4:Linux 服务器部署关键命令与效果示意图
| 命令 | 作用说明 | 成功效果 |
|---|---|---|
|
后台运行 jar 包 | 终端输出 “[1] 1234”(进程号 1234) |
|
实时查看运行日志 | 显示 Spring Boot 启动日志,直到 “Started…” |
|
检查 8080 端口是否开放 | 终端输出 “yes” |
步骤 5:测试访问
在本地浏览器输入 “Linux 服务器 IP:8080/book/list”(比如),能看到图书列表,企业级部署就完成了!
http://192.168.1.101:8080/book/list
四、第三部分:部署后常见问题排查(避坑指南)
新手部署常遇到 “访问不到”“连不上数据库”,用下面的方法排查,90% 的问题都能解决:
1. 问题 1:jar 包启动报错 “找不到主类”
原因:pom.xml 没配置,或路径写错(比如少写了包名);解决:检查
mainClass的
spring-boot-maven-plugin是否为
mainClass,重新打包。
com.example.bookmanage.BookManageApplication
2. 问题 2:访问 “服务器 IP:8080” 没反应
排查步骤:
先在服务器本地执行,看是否返回数据(排除项目本身问题);检查服务器防火墙是否开放 8080 端口(Windows 看 “高级防火墙”,Linux 用
curl http://localhost:8080/book/list);确认服务器 IP 是否正确(用
firewall-cmd --query-port=8080/tcp(Windows)或
ipconfig(Linux)查看)。
ifconfig
3. 问题 3:数据库连接失败(HikariPool 启动失败)
原因:
数据库地址 / 用户名 / 密码错(配置和服务器 MySQL 不一致);服务器 MySQL 没启动(Windows 看服务,Linux 用
application.yml看 MySQL 容器是否运行);远程访问没开启(Linux MySQL 默认不允许远程连接,需授权:
docker ps)。
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
















暂无评论内容