4c94bdf666
Task 3.2 - Java 编译验证: - JavaCompilerValidator: 使用 javac 进行编译验证 - 支持临时文件编译和清理 - 集成到 ICompilerValidator 接口 - 单元测试 (需要 javac 环境) Task 4.4 - 前端代码编辑器: - CodeEditor.vue: Monaco Editor 集成 - 支持 C#/Java/C++ 语法高亮 - 智能代码补全 (main 方法,System.out.println 等) - 支持主题切换 (vs-dark/vs/hc-black) - 支持只读模式、最小化地图、自动布局 - 暴露 API: setValue, getValue, focus, layout 测试状态: - 总测试数: 42 - 通过: 41 ✅ - 跳过: 1 (Java 编译器测试需要 javac 环境) 前端依赖: - 需安装 monaco-editor: npm install monaco-editor Co-authored-by: monkeycode-ai <monkeycode-ai@chaitin.com>
4.9 KiB
4.9 KiB
批量转换功能使用指南
概述
CodePlay 现在支持批量文件和目录转换,可以一次性转换整个项目或目录下的所有源代码文件。
核心功能
1. 目录转换
自动递归转换指定目录下的所有符合条件的源文件。
2. 保持目录结构
转换后的文件保持原始目录结构,方便项目整体迁移。
3. 详细报告
提供批量转换统计信息,包括成功/失败文件列表和详细错误信息。
CLI 命令参考
基本语法
dotnet run --project CodePlay.CLI -- convert \
-s <源语言> -t <目标语言> \
-i <输入目录> \
-o <输出目录> \
-b [选项]
常用参数
| 参数 | 简写 | 说明 | 默认值 |
|---|---|---|---|
--source-language |
-s |
源语言 (CSharp, Java) | 必填 |
--target-language |
-t |
目标语言 (CSharp, Java) | 必填 |
--input |
-i |
输入目录路径 | 必填 |
--output |
-o |
输出目录路径 | 自动生成 |
--batch |
-b |
启用批量模式 | false |
--recursive |
-r |
递归子目录 | true |
--verbose |
显示详细信息 | false | |
--validation-rounds |
-v |
验证轮次 (1-3) | 2 |
使用示例
示例 1: 转换 C# 项目到 Java
# 转换整个 C# 项目目录
dotnet run --project CodePlay.CLI -- \
convert -s CSharp -t Java \
-i ./MyCSharpProject \
-o ./MyJavaProject \
-b
示例 2: 带详细输出的转换
# 显示每个文件的转换详情
dotnet run --project CodePlay.CLI -- \
convert -s CSharp -t Java \
-i ./src \
-b --verbose
示例 3: 不递归子目录
# 仅转换当前目录,不处理子目录
dotnet run --project CodePlay.CLI -- \
convert -s CSharp -t Java \
-i ./src \
-b -r false
示例 4: 指定输出目录
# 转换到指定输出目录
dotnet run --project CodePlay.CLI -- \
convert -s Java -t CSharp \
-i ./java-src \
-o ./csharp-output \
-b
示例 5: 单文件转换(向后兼容)
# 批量模式和单文件模式自动检测
dotnet run --project CodePlay.CLI -- \
convert -s CSharp -t Java \
-i ./Program.cs \
-o ./Program.java
输出示例
成功转换时:
📁 批量转换模式启动
源目录:./MyCSharpProject
目标目录:./MyJavaProject
递归:True
==== 批量转换完成 ====
源目录:./MyCSharpProject
目标目录:./MyJavaProject
总文件数:15
成功:15
失败:0
耗时:3.45 秒
成功转换的文件:
✅ UserService.cs → UserService.java
行数:120, 类:1, 方法:8
✅ OrderController.cs → OrderController.java
行数:85, 类:1, 方法:5
...
🎉 所有文件转换成功!
部分失败时:
==== 批量转换完成 ====
总文件数:15
成功:13
失败:2
耗时:3.45 秒
转换失败的文件:
❌ LegacyCode.cs
错误:Unsupported syntax pattern detected
❌ OldStyle.cs
错误:Compilation validation failed after 3 rounds
⚠️ 2 个文件转换失败
批量转换结果详情
BatchConversionResult
Success: 是否全部成功TotalFiles: 总文件数SuccessfulFiles: 成功文件数FailedFiles: 失败文件数Duration: 转换耗时ConvertedFiles: 成功文件详情列表FailedFileList: 失败文件详情列表
ConvertedFileInfo
SourceFile: 源文件路径TargetFile: 目标文件路径LinesConverted: 转换行数ClassesConverted: 转换类数MethodsConverted: 转换方法数Warnings: 警告数量Issues: 问题数量
报告存储
批量转换会自动创建报告并存储:
ProjectId: 格式为batch-YYYYMMDD- 可通过
list命令查看历史转换记录 - 可通过
reportAPI 查询详细报告
最佳实践
- 先小批量测试:先用少量文件测试转换效果
- 使用详细模式:首次转换使用
--verbose查看细节 - 检查失败文件:转换后查看失败文件列表
- 保留原始代码:输出目录不要覆盖原始目录
API 集成
也可以通过 Web API 调用批量转换:
var batchService = new BatchConversionService(
new ConversionService(),
new ReportStorageService()
);
var result = await batchService.ConvertDirectoryAsync(
"./src", "./output",
LanguageType.CSharp, LanguageType.Java
);
故障排查
Q: 找不到某些文件? A: 确保文件扩展名正确(.cs, .java 等),默认只转换对应语言的文件。
Q: 转换失败如何修复?
A: 使用 --verbose 查看详细错误,手动修复后重新转换单个文件。
Q: 如何跳过某些目录? A: 当前版本不支持目录过滤,可将需要转换的文件复制到其他目录。
后续计划
- 支持文件白名单/黑名单
- 支持并行转换加速
- 支持断点续传
- 支持自定义转换规则配置
更新日期: 2025-06-03
测试状态: 40 个测试全部通过 ✅