221 lines
6.1 KiB
Markdown
221 lines
6.1 KiB
Markdown
# 项目重构自动化脚本
|
||
|
||
这是一套用于Maven项目重构的自动化脚本,可以批量修改项目的包名、groupId、artifactId、模块名称等,让你轻松地将一个项目模板改造为新的项目。
|
||
|
||
## 功能特性
|
||
|
||
🚀 **全自动重构**: 一键修改项目中的所有相关配置
|
||
📦 **多文件支持**: 支持修改POM文件、Java源码、XML映射文件、配置文件
|
||
🗂️ **目录重构**: 自动重命名Java包目录和模块目录
|
||
🔧 **可视化界面**: 友好的命令行交互界面
|
||
💾 **安全备份**: 可选的项目备份功能
|
||
⚡ **批量处理**: 支持配置文件批量重构
|
||
|
||
## 文件说明
|
||
|
||
```
|
||
script/
|
||
├── project-refactor.sh # 主重构脚本(交互式)
|
||
├── batch-refactor.sh # 批量重构脚本(配置文件)
|
||
├── refactor-config.example # 配置文件模板
|
||
└── README.md # 使用说明(本文件)
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 方法一:交互式重构(推荐新手)
|
||
|
||
```bash
|
||
# 进入脚本目录
|
||
cd script
|
||
|
||
# 运行交互式重构脚本
|
||
./project-refactor.sh
|
||
```
|
||
|
||
脚本会引导你输入以下信息:
|
||
- 项目根目录路径
|
||
- 旧的 GroupId(如:org.leocoder.thin)
|
||
- 旧的 ArtifactId(如:coder-common-thin-backend)
|
||
- 旧的模块前缀(如:coder-common-thin)
|
||
- 新的 GroupId(如:org.leocoder.course)
|
||
- 新的 ArtifactId(如:coder-course-backend)
|
||
- 新的模块前缀(如:coder-course)
|
||
- 数据库名称(可选)
|
||
|
||
### 方法二:配置文件批量重构(推荐批量处理)
|
||
|
||
```bash
|
||
# 1. 复制配置文件模板
|
||
cp refactor-config.example my-project.conf
|
||
|
||
# 2. 编辑配置文件
|
||
vim my-project.conf
|
||
|
||
# 3. 运行批量重构
|
||
./batch-refactor.sh my-project.conf
|
||
```
|
||
|
||
#### 配置文件格式
|
||
|
||
```bash
|
||
# 项目基本信息
|
||
PROJECT_DIR="/path/to/your/project"
|
||
|
||
# 旧配置
|
||
OLD_GROUP_ID="org.leocoder.thin"
|
||
OLD_ARTIFACT_ID="coder-common-thin-backend"
|
||
OLD_MODULE_PREFIX="coder-common-thin"
|
||
OLD_DATABASE_NAME="coder-common-thin"
|
||
|
||
# 新配置
|
||
NEW_GROUP_ID="org.leocoder.course"
|
||
NEW_ARTIFACT_ID="coder-course-backend"
|
||
NEW_MODULE_PREFIX="coder-course"
|
||
NEW_DATABASE_NAME="coder-course"
|
||
|
||
# 其他选项
|
||
CREATE_BACKUP="true" # 是否创建备份
|
||
AUTO_CONFIRM="false" # 是否自动确认(跳过确认步骤)
|
||
```
|
||
|
||
## 重构内容
|
||
|
||
脚本会自动处理以下内容:
|
||
|
||
### 1. POM文件修改
|
||
- ✅ 修改根POM和所有子模块的 `<groupId>`
|
||
- ✅ 修改根POM和所有子模块的 `<artifactId>`
|
||
- ✅ 修改 `<name>` 标签
|
||
- ✅ 修改 `<module>` 引用
|
||
- ✅ 修改依赖引用中的groupId和artifactId
|
||
|
||
### 2. Java源码修改
|
||
- ✅ 修改所有Java文件的 `package` 声明
|
||
- ✅ 修改所有Java文件的 `import` 语句
|
||
- ✅ 修改注解中的包名引用(如@SpringBootApplication的scanBasePackages)
|
||
|
||
### 3. XML映射文件
|
||
- ✅ 修改MyBatis Mapper文件的 `namespace`
|
||
- ✅ 修改 `resultType` 中的包名引用
|
||
|
||
### 4. 配置文件
|
||
- ✅ 修改YAML/Properties文件中的包扫描配置
|
||
- ✅ 修改数据库连接配置中的数据库名
|
||
- ✅ 修改文件路径配置
|
||
|
||
### 5. 目录结构重构
|
||
- ✅ 重命名Java包目录结构(src/main/java/com/old/package → src/main/java/com/new/package)
|
||
- ✅ 重命名模块目录(old-module-name → new-module-name)
|
||
- ✅ 重命名SQL文件
|
||
|
||
## 使用示例
|
||
|
||
### 示例1:从通用框架改造为选课系统
|
||
|
||
```bash
|
||
# 交互式输入
|
||
./project-refactor.sh
|
||
|
||
# 输入示例:
|
||
# 项目路径: /Users/leocoder/my-project
|
||
# 旧的 GroupId: org.leocoder.thin
|
||
# 旧的 ArtifactId: coder-common-thin-backend
|
||
# 旧的模块前缀: coder-common-thin
|
||
# 新的 GroupId: org.leocoder.course
|
||
# 新的 ArtifactId: coder-course-backend
|
||
# 新的模块前缀: coder-course
|
||
```
|
||
|
||
### 示例2:批量处理多个项目
|
||
|
||
```bash
|
||
# 为选课系统创建配置
|
||
cat > course-system.conf << EOF
|
||
PROJECT_DIR="/Users/leocoder/course-project"
|
||
OLD_GROUP_ID="org.leocoder.thin"
|
||
OLD_ARTIFACT_ID="coder-common-thin-backend"
|
||
OLD_MODULE_PREFIX="coder-common-thin"
|
||
NEW_GROUP_ID="org.leocoder.course"
|
||
NEW_ARTIFACT_ID="coder-course-backend"
|
||
NEW_MODULE_PREFIX="coder-course"
|
||
CREATE_BACKUP="true"
|
||
AUTO_CONFIRM="false"
|
||
EOF
|
||
|
||
# 为库存系统创建配置
|
||
cat > inventory-system.conf << EOF
|
||
PROJECT_DIR="/Users/leocoder/inventory-project"
|
||
OLD_GROUP_ID="org.leocoder.thin"
|
||
OLD_ARTIFACT_ID="coder-common-thin-backend"
|
||
OLD_MODULE_PREFIX="coder-common-thin"
|
||
NEW_GROUP_ID="org.leocoder.inventory"
|
||
NEW_ARTIFACT_ID="coder-inventory-backend"
|
||
NEW_MODULE_PREFIX="coder-inventory"
|
||
CREATE_BACKUP="true"
|
||
AUTO_CONFIRM="false"
|
||
EOF
|
||
|
||
# 执行批量重构
|
||
./batch-refactor.sh course-system.conf
|
||
./batch-refactor.sh inventory-system.conf
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
⚠️ **重要提醒**:
|
||
1. **备份项目**: 重构前强烈建议备份整个项目
|
||
2. **关闭IDE**: 重构期间请关闭IDE,避免文件锁定
|
||
3. **检查结果**: 重构完成后请检查项目能否正常编译运行
|
||
4. **更新配置**: 检查IDE的运行配置是否需要更新
|
||
|
||
### 重构后需要手动检查的项目
|
||
- [ ] IDE中的运行配置(主类路径)
|
||
- [ ] 数据库连接配置
|
||
- [ ] 第三方服务配置
|
||
- [ ] 测试用例
|
||
- [ ] 文档更新
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
**Q: 脚本执行后项目无法启动?**
|
||
A: 检查IDE的运行配置,确保主类路径已更新为新的包名。
|
||
|
||
**Q: 某些文件没有被修改?**
|
||
A: 检查文件是否在target目录下,脚本会跳过编译输出目录。
|
||
|
||
**Q: 包名格式验证失败?**
|
||
A: 确保包名符合Java命名规范,只能包含字母、数字、下划线和点号。
|
||
|
||
**Q: 权限被拒绝?**
|
||
A: 确保脚本有执行权限:`chmod +x *.sh`
|
||
|
||
### 调试技巧
|
||
|
||
1. **查看详细日志**: 脚本会显示处理的文件信息
|
||
2. **检查备份**: 如果出现问题,可以从备份恢复
|
||
3. **分步执行**: 可以注释掉脚本中的某些步骤来分步调试
|
||
|
||
## 扩展功能
|
||
|
||
你可以根据需要扩展脚本功能:
|
||
|
||
1. **添加新的文件类型**: 在相应的函数中添加处理逻辑
|
||
2. **自定义替换规则**: 修改sed命令的正则表达式
|
||
3. **集成到CI/CD**: 将脚本集成到自动化流水线中
|
||
|
||
## 贡献
|
||
|
||
如果你发现bug或有改进建议,请提交issue或pull request。
|
||
|
||
## 许可证
|
||
|
||
MIT License
|
||
|
||
---
|
||
|
||
**作者**: Leocoder
|
||
**版本**: 1.0
|
||
**最后更新**: 2025-07-06 |