QDAirPortBackend0122/doc/guide/配置重构后的编译说明.md
2026-01-22 13:19:47 +08:00

294 lines
6.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 配置重构后的编译说明
**日期**: 2025-01-10
**适用版本**: v1.0.1+
---
## ❓ 配置重构后,编译命令需要改吗?
### 答案:❌ 不需要改!
---
## 📋 编译命令保持不变
### 开发环境编译
```bash
# 完整编译
mvn clean install
# 跳过测试(更快)
mvn clean install -DskipTests
# 只编译 admin 模块
cd qaup-admin
mvn clean package -DskipTests
```
### 生产环境打包
```bash
# 打包生产版本
mvn clean package -DskipTests
# 或指定 profile可选
mvn clean package -DskipTests -Pprod
```
---
## 🔍 为什么不需要修改?
### 1. 配置文件自动打包
Maven 会自动将 `src/main/resources/` 下的所有文件打包到 jar 中,包括:
```
qaup-admin/src/main/resources/
├── application.yml ✅ 自动打包
├── application-dev.yml ✅ 自动打包
├── application-prod.yml ✅ 自动打包
└── application-druid.yml ✅ 自动打包
```
### 2. 环境变量是运行时机制
- `.env` 文件**不打包**到 jar 中(也不应该打包)
- 环境变量在应用**启动时**由 `qaup.sh` 加载
- 与编译过程无关
### 3. Profile 在运行时指定
- Profile 通过 `--spring.profiles.active` 在启动时指定
- 不影响编译过程
---
## 📦 打包后的结构
### jar 包内部结构
```
qaup-admin.jar
├── BOOT-INF/
│ ├── classes/
│ │ ├── application.yml ✅ 打包
│ │ ├── application-dev.yml ✅ 打包
│ │ ├── application-prod.yml ✅ 打包
│ │ ├── application-druid.yml ✅ 打包
│ │ └── com/qaup/... (Java类)
│ └── lib/ (依赖jar)
├── META-INF/
└── org/springframework/boot/loader/
```
### 部署目录结构
```
/app/ # 部署目录
├── qaup-admin.jar # 打包的jar包含所有配置文件
├── qaup.sh # 启动脚本
├── .env ❌ 不打包,部署时手动创建
├── .env.example 📝 可选建议通过Git获取
└── logs/ # 日志目录
```
---
## 🎯 完整的开发-部署流程
### 1⃣ 开发阶段(本地)
```bash
# 方式1: IDEA 中直接启动
# 自动使用 dev profile无需编译
# 方式2: Maven 启动
cd qaup-admin
mvn spring-boot:run -Dspring-boot.run.profiles=dev,druid
```
### 2⃣ 打包阶段
```bash
# 在项目根目录执行
mvn clean package -DskipTests
# 生成的 jar 包位置
ls -lh qaup-admin/target/qaup-admin.jar
```
### 3⃣ 部署阶段
```bash
# 1. 复制文件到服务器
scp qaup-admin/target/qaup-admin.jar user@server:/app/
scp qaup.sh user@server:/app/
scp .env.example user@server:/app/
# 2. 在服务器上创建配置
cd /app
cp .env.example .env
vim .env
# 3. 启动应用
./qaup.sh start
```
---
## 🔒 重要提醒
### ✅ 应该做的
1. **打包所有配置文件到 jar**
```bash
# application*.yml 会自动打包
mvn clean package -DskipTests
```
2. **在部署时创建 .env**
```bash
# 在服务器上创建
cp .env.example .env
vim .env
```
3. **通过 Git 管理配置模板**
```bash
# .gitignore
.env # 忽略实际配置
!.env.example # 保留模板
```
### ❌ 不应该做的
1. **不要把 .env 打包到 jar**
- 包含敏感信息
- 每个环境配置不同
2. **不要在编译时指定环境变量**
```bash
# ❌ 错误
mvn clean package -DAIRPORT_API_BASE_URL=http://...
# ✅ 正确:编译时不指定,运行时通过 .env 加载
mvn clean package -DskipTests
```
3. **不要打包备份文件**
```bash
# 打包前删除
rm qaup-admin/src/main/resources/*.backup
```
---
## 📋 建议的 .gitignore 配置
```bash
# 环境变量配置(重要!)
.env
.env.local
.env.production
.env.*.local
# 配置备份文件
*.backup
# 日志文件
logs/
*.log
# Maven 构建目录
target/
# IDEA 项目文件
.idea/
*.iml
```
---
## 🆚 配置重构前后对比
| 项目 | 重构前 | 重构后 |
|-----|--------|--------|
| **编译命令** | `mvn clean package` | `mvn clean package` ✅ 不变 |
| **配置修改** | 修改配置文件 → 重新打包 | 修改 .env → 重启应用 |
| **环境切换** | 修改配置文件 → 重新打包 | 切换 .env → 重启应用 |
| **敏感信息** | 打包到 jar 中 ❌ | 保存在 .env 中 ✅ |
---
## 💡 常见问题
### Q1: `.env.example` 要打包到 jar 吗?
**A**: 📝 建议不打包
**原因**:
- 可以通过 Git 获取
- 减小 jar 体积
- 部署时从项目源码复制
**操作**:
```bash
# 部署时从项目获取
git clone <repo>
cp <project>/.env.example /app/.env
```
### Q2: 如果我只修改了 .env需要重新编译吗
**A**: ❌ 不需要
```bash
# 只需要
vim .env
./qaup.sh restart
```
### Q3: 如果我修改了 application-prod.yml需要重新编译吗
**A**: ✅ 需要
```bash
# 修改配置文件后
mvn clean package -DskipTests
# 重新部署 jar
scp qaup-admin/target/qaup-admin.jar user@server:/app/
./qaup.sh restart
```
**建议**: 尽量使用环境变量方式,避免重新打包
---
## 🎯 最佳实践总结
1.**编译命令保持不变**: `mvn clean package -DskipTests`
2.**配置文件自动打包**: 所有 `application*.yml` 都会打包
3.**环境变量运行时加载**: `.env` 不打包,部署时创建
4.**敏感信息不打包**: 密码、地址等通过 `.env` 管理
5.**一次打包,多环境部署**: 通过不同的 `.env` 文件区分环境
---
## 📚 相关文档
- [配置文件重构说明](../working/20250110_配置文件重构说明.md)
- [环境变量配置方案](../working/20250110_环境变量配置方案.md)
- [qaup.sh 更新说明](../working/20250110_qaup.sh更新说明.md)
- [CLAUDE.md - 项目说明](../../CLAUDE.md)
---
**文档结束**
**最后更新**: 2025-01-10
**维护者**: QAUP Team