---
name: backend-project-init
description: Use when E10/e-code Java backend work needs local backend project initialization, secondev module checks, Gradle template repair, secDevLib/secDevClasses dependency import, backend build, jar packaging, or deployment verification.
---

# 后端工程初始化

后端工程类唯一权威 Skill。只处理后端 Java 本地工程初始化、子模块规范、二开依赖导入、构建、二开 jar 打包、部署前确认和部署验证。业务 Controller、Service、SQL、Hook、日志代码规范继续交给 `backend-development`。

## 触发

- 纯后端开发或全栈任务的后端部分进入实际开发前。
- 用户提到 `secondev-*` 子模块、二开依赖、服务依赖、`secDevLib`、`secDevClasses`、Gradle 模板缺失。
- 后端根工程缺失、子模块骨架缺失、构建、测试、打 jar、部署或部署验证。
- 构建或测试提示后端依赖缺失。

快路径：命中 `二开依赖|服务依赖|secDevLib|secDevClasses|secondev-* 缺依赖` 时，直接使用本 Skill；不做案例检索、API 检索或前端工程检查。

## 最小校验

优先读取 `.ecode-runtime/project-state.json`。缓存无效时检查后端根工程：

- `buildSrc`
- `gradle`
- `secDevLib`
- `secDevClasses`
- `devLib`
- `build.gradle`
- `settings.gradle`
- `gradlew`
- `gradlew.bat`
- `gradle.properties`

子模块同时检查：

- 目录名必须以 `secondev-` 开头
- `<module>/<module>.gradle` 命名必须与目录名一致
- `src/main/java`
- `src/main/resources`

校验结果至少区分 `root_template_invalid`、`module_template_invalid`、`dependency_incomplete`。

## 初始化硬门禁

- 后端根工程或子模块骨架缺失时，禁止手工使用 `mkdir`、`touch`、`echo`、临时脚本或直接写 Gradle 文件创建后端工程结构。
- 必须先使用本 Skill 的初始化能力。当前 `backend-project-init/scripts/project-validator.mjs` 只提供 inspect/download 能力，不提供根工程模板创建或子模块创建。
- 若检查结果需要创建或修复根工程/子模块，但当前没有可用初始化实现，必须停止并报告 `backend_project_initializer_missing`，列出缺失项、目标后端根目录、目标子模块名和已完成的检查结果。
- 不得用“先建目录再补文件”的方式绕过本门禁；也不得把旧规范、案例或 `backend-development` 中的目录示例当作可执行模板。
- 仅当仓库已存在合规骨架时，才允许继续业务开发、构建、打包或部署验证。

## 后端依赖在线导入

`secDevLib` 中 jar 数量必须 > 500。若 `secDevLib` jar 数量 <= 500：

1. 读取用户本轮提供的 E10 基线版本，或复用 `.ecode-runtime/project-state.json` 中未冲突的 `E10Version`。
2. 若仍无版本，只询问一次 E10 基线版本；不得猜测“最新版本”。
3. 使用 `backend-project-init/scripts/project-validator.mjs` 的版本映射解析下载地址。
4. 在线下载依赖包到临时目录，解压，查找所有 jar。
5. 将 jar 导入 `<后端根工程>/secDevLib/`。
6. 重新统计 `secDevLib` jar 数量，确认 > 500。
7. 写入 `.ecode-runtime/project-state.json`：`E10Version`、`projectInitialized`、`dependencyInitialized`、`secDevLibJarCount`、`checkedAt`。

## 构建、打包与部署验证

进入构建前先确认：

- `projectInitialized=true`
- `dependencyInitialized=true`
- `secDevLibJarCount > 500`
- 后端根工程和目标 `secondev-*` 子模块均通过模板检查
- 使用项目自带 Gradle Wrapper 和项目要求的 JDK

命令选择：

- 只验证业务测试：`./gradlew :<module>:test`
- 只验证编译：`./gradlew :<module>:compileJava`
- 用户要求二开 jar 或部署前产物：`./gradlew :<module>:jar`
- 多模块或公共代码变更时，只扩大到受影响模块；不得把未运行命令写成已通过。

打包规则：

- 使用项目既有 Gradle 脚本产出二开 jar，不手写临时 `build.gradle` 或复制 jar 结构。
- 确认 jar 产物路径、文件名、生成时间和目标模块。
- jar 内容、依赖范围和资源过滤以项目构建脚本为准；不从 `backend-development` 展开工程模板。

部署前确认：

- 目标 E10 基线版本
- 目标二开服务
- 上传权限
- 回滚版本或回退方案
- 部署窗口和影响范围

部署验证：

- 记录上传/部署入口、目标服务、jar 版本和验证接口。
- 部署失败时交给 `ecode-troubleshooting` 或后端日志排障；不要在本 Skill 中展开业务日志规范。

## 禁止

- 不调用 `e10-frontend-local-tooling`。
- 不读取前端 `build.json` 或前端入口文件。
- 不调用 `e10-frontend-local-tooling init`。
- 不走案例检索、前端组件检索或前端初始化规则。
- 不使用 `e10-frontend-local-tooling` 处理任何后端依赖导入。
- 不从 `backend-development` 或 `backend-development` 读取后端工程模板、Gradle 模板、构建打包或部署流程。

## 详细参考

- 后端模板与初始化旧规范：[`references/project-template.md`](references/project-template.md)
