版本与环境
- 受影响路径:generator/codegen_tools.py 的 JavaCodeGenerator._get_output_path()。
- 运行时:Python 3.10+,Default、MybatisPlus、MybatisPlus-Mixed、sb35-java21 模板路线。
- 输入:固定 TableInfo 和 packageSuffix,可不连接真实数据库。
- 安装方式:仓库虚拟环境,PYTHONPATH=src。
问题与预期行为
TemplateConfigManager.get_output_path_mapping() 使用 entity/{packageSuffix}/{className}.java 等模板。packageSuffix 为空时旧路径直接格式化为 entity//Account.java、dao//AccountDao.java 等双分隔符。Windows 可能容忍该字符串,但返回值、日志和下游路径比较会受到污染。
预期行为:格式化后的相对路径移除空路径段;有前缀时保留 entity/sys/Account.java 等层级,文件内容、包声明、文件名和输出目录安全边界不变。
最小复现
使用 className=Account、packageSuffix="" 调用 JavaCodeGenerator._get_output_path()。修复前返回包含连续分隔符的路径;预期返回 entity/Account.java 等规范路径。使用 packageSuffix=sys 时应仍返回 entity/sys/Account.java。
验收标准
非目标、风险与安全
本 Issue 不改变模板内容、数据库查询、包命名算法或原子 MCP 输出路径合同,不连接真实数据库。风险仅为路径字符串从不规范变为规范;不得把本地凭据或生成物提交到复现中,关联提交可单独回滚。
版本与环境
问题与预期行为
TemplateConfigManager.get_output_path_mapping() 使用 entity/{packageSuffix}/{className}.java 等模板。packageSuffix 为空时旧路径直接格式化为 entity//Account.java、dao//AccountDao.java 等双分隔符。Windows 可能容忍该字符串,但返回值、日志和下游路径比较会受到污染。
预期行为:格式化后的相对路径移除空路径段;有前缀时保留 entity/sys/Account.java 等层级,文件内容、包声明、文件名和输出目录安全边界不变。
最小复现
使用 className=Account、packageSuffix="" 调用 JavaCodeGenerator._get_output_path()。修复前返回包含连续分隔符的路径;预期返回 entity/Account.java 等规范路径。使用 packageSuffix=sys 时应仍返回 entity/sys/Account.java。
验收标准
非目标、风险与安全
本 Issue 不改变模板内容、数据库查询、包命名算法或原子 MCP 输出路径合同,不连接真实数据库。风险仅为路径字符串从不规范变为规范;不得把本地凭据或生成物提交到复现中,关联提交可单独回滚。