跳到正文
cccskills
免费在 GitHub 公开

alibaba-java-development-guide

《阿里巴巴Java开发手册(黄山版)》总纲与路由入口。涵盖编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约七大维度。

Use when writing, reviewing, or designing Java code; handling exceptions/logging; writing SQL or designing tables; writing unit tests; designing project architecture; or whenever Alibaba Java standards apply. 写/改 Java 或 SQL 代码前先读 SKILL.md「规约执行策略」。

P0 红线(新代码与被改到的存量代码都必须合规,静默保留红线问题视为违规):禁 Executors.newFixedThreadPool/newCachedThreadPool 等工厂(须 new ThreadPoolExecutor 显式参数);禁裸 new Thread;日期禁 SimpleDateFormat 与 java.util.Date(一律 java.time + DateTimeFormatter);SQL 禁 ${} 拼接、update/delete 必带 where;资源必须 try-with-resources;禁空 catch 吞异常;集合禁 return null;ThreadLocal 用后必须 remove。

改存量时「其他保持不变」不适用于红线:先完成原需求,随后必须在输出中显式指出红线问题(引用规约编号)并附修复代码——输出中出现红线反例却只字不提,即任务失败。命名等风格规约只强制新写的代码,存量代码不重命名、不刷屏。详细条文按需查阅 data/ 对应章节。

中文简介正在准备中。当前显示原文说明。

Sxuan-Coder/alibaba-java-development-guide星标 56(GitHub 56 + cccskills 0)
集成工具MySQL

实测评分 未实测

查看安装方法

包含的文件(28)

  • SKILL.md20.5 KB
  • .github/workflows/release.yml1.4 KB
  • .gitignore336 B
  • data/01-coding-standards.md66.9 KB
  • data/02-exception-logging.md14.7 KB
  • data/03-unit-testing.md5.2 KB
  • data/04-security-standards.md3.1 KB
  • data/05-mysql-database.md15.5 KB
  • data/06-project-structure.md10.0 KB
  • data/07-design-standards.md8.0 KB
  • data/08-appendix.md13.1 KB
  • evals/cases/collection-concurrency.yaml1.2 KB
  • evals/cases/date-time-api.yaml936 B
  • evals/cases/legacy-add-feature.yaml2.0 KB
  • evals/cases/legacy-threadpool-enforce.yaml1.6 KB
  • evals/cases/naming-style.yaml1.1 KB
  • evals/cases/null-safety-service.yaml757 B
  • evals/cases/project-layering.yaml903 B
  • evals/cases/review-bad-code.yaml2.0 KB
  • evals/cases/review-money-calc.yaml1.0 KB
  • evals/cases/sql-injection.yaml690 B
  • evals/eval.yaml993 B
  • evals/fixtures/scripts/score-null-safety.ps12.1 KB
  • evals/fixtures/scripts/score-sql-injection.ps11.9 KB
  • memory.md1.1 KB
  • project/_template.md3.0 KB
  • project/README.md1.0 KB
  • README.md12.8 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

阿里巴巴Java开发手册(黄山版)— 总纲与路由

手册定位

码出高效,码出质量。

本 skill 是《Java开发手册(黄山版)》(v1.7.1,2022.02.03 发布)的总纲入口。手册以 Java 开发者为中心视角,划分为七个维度。本 SKILL.md 只做导航路由,不内联全部条文——详细规约按需从 data/ 目录取对应章节阅读,避免一次性载入全部内容。

规约分级

手册每条规约依据约束力强弱及故障敏感性分为三类,查阅 data 文件时以此判断优先级:

级别含义处理原则
【强制】必须严格遵守违反可能导致严重问题或线上故障,review 时必查
【推荐】建议遵循有助于提升代码质量,无特殊情况应遵循
【参考】参考性建议可根据实际团队情况选择,灵活应用

每条规约通常包含:说明(扩展解释)、正例(提倡写法)、反例(雷区与真实故障案例)。

规约执行策略(三级管控)

【强制】/【推荐】/【参考】是规约自身的严重性;本节定义 agent 执行时的行为——尤其在存量代码质量参差的仓库里,避免「全量强制刷屏」与「放任隐患」两个极端。

分层判据:违反后是否可能导致线上故障、安全漏洞、资源泄露或数据损坏——是则归 P0;仅影响可读性/一致性的【强制】规约归 P1。P0 清单与企业 CI 代码质量门禁的阻断项(P3C / PMD Blocker 级规则)对齐:门禁拦的是提交结果,本策略管的是生成源头——命中 P0 的代码会直接打回流水线,所以 P0 不参与渐进、不接受口头豁免。

执行层级覆盖范围一句话行为
🔴 P0 红线隐患型【强制】(见下方红线清单)新代码直接写合规;被改到的存量代码发现即修复;不可口头豁免
🟡 P1 新代码强制其余【强制】(命名风格、常量、格式、OOP、注释、控制语句、分层结构等风格/结构类)只约束新写的代码;存量不扫描、不强制改、不刷屏
🟢 P2 建议全部【推荐】/【参考】提示不阻塞,用户说忽略即忽略

P0 红线清单

红线域条文位置必查项
线程池01-(七)禁 Executors.newFixedThreadPool / newCachedThreadPool / newSingleThreadExecutor 等工厂方法;必须 new ThreadPoolExecutor(核心数, 最大数, keepAlive, 时间单位, 队列, 命名 ThreadFactory, 拒绝策略) 显式创建;禁裸 new Thread()
并发安全01-(七)日期时间一律 java.time(禁 SimpleDateFormat 与 java.util.Date——前者非线程安全是真实故障源,后者已过时);ThreadLocal 用完必须 try-finally remove();双重检查锁字段必须 volatile;多线程读写用并发容器
安全漏洞04 全部SQL 必须参数绑定(#{} / ?,禁 ${} 拼接用户输入);防越权校验;XSS 转义;敏感数据脱敏
资源与事务02-(二)(三)文件/网络连接必须 try-with-resources 或 finally 关闭;事务异常必须回滚;禁 catch 后吞异常继续执行
NPE 防护01-(六) / 02-(二)集合类返回值禁止 return null(用空集合);入参校验用具名 API(Objects.requireNonNull / StringUtils.isBlank);字符串比较常量在前
破坏性 SQL05-(三)update / delete 必须带 where;判存在禁全表 count(*)(用 limit 1)

执行行为矩阵

场景🔴 P0🟡 P1🟢 P2
写新代码直接写合规写法,输出代码中禁止出现红线反例 API必须合规默认套用,可简化
修改存量方法被改到的类/文件内发现红线问题 → 直接修复(含类字段,如线程池定义),并在输出中说明依据(如「01-(七)4【强制】」);修复涉及公共契约/多调用方时先报告方案再动手;用户的「其他保持不变」不能让红线问题蒙混过关——可先完成原需求,再单独给出红线修复仅新增/修改的行合规;不重命名周边存量标识符(避免大 diff);override 存量接口或调用存量方法时保持既有签名以保编译顺手改进,不强制
Review 存量代码必须报告,按红线域汇总(不逐条刷屏)一句话汇总(如「存量另有 23 处命名不符规约,属存量问题未强制修改」),被问到再展开默认不提

新代码 / 存量代码判定:新代码 = 本次生成或重写的文件、方法、标识符;存量代码 = 仓库中已存在且本次未修改的代码。「被改到」= 本次 diff 实际触碰的方法/类。项目级配置见 project/<项目名>.md 的「规约执行策略」区(存量卫生度、P1 存量输出模式)。

豁免协议

层级豁免方式
🟡 P1 / 🟢 P2用户一句话即可(如「这个仓库不查命名」「忽略推荐级」),会话内生效;随后可询问是否写入 project/<项目名>.md 持久化
🔴 P0模糊指令(「忽略检查」「别管了」)不生效。必须同时满足:① 用户点名豁免的规约编号并说明理由;② 代码处添加注释 // Alibaba-Java-P0-EXEMPT(01-(七)4): 已评估内存风险,压测需要无界队列;③ 最终输出末尾明示「已豁免红线清单」

适用边界

明确本 Skill 的启用与豁免场景,避免在不合适的场景下过度套用规约:

场景建议
生产代码编写 / Review✅ 正常启用,三级执行策略全生效
快速原型、Demo、一次性脚本🔸 P2(【推荐】/【参考】)可豁免;P1 新代码仍遵守(成本低);🔴 P0 红线不可豁免
性能极敏感的高频并发代码🔸 方法行数、圈复杂度等 P1/P2 规约可酌情豁免,需注释说明理由;P0 红线仍生效
公开 SDK / API 设计✅ 正常启用,且应从严遵守命名规约与版本兼容规约
重构存量代码🔸 按三级执行策略:🔴 P0 被改到即修复;🟡 P1 只管新写部分;「保持行为不变」优先于「一次性对齐所有规约」
存量代码质量差的老仓库🔸 只要求新写代码合规;存量 P1 问题一句话汇总、不强制改;🔴 P0 红线在被触碰的代码内仍强制
用户明确声明「关闭阿里规约检查」🛑 完全禁用(用户旨意最高)——但输出末尾保留一行 P0 风险提示(如「已关闭检查:发现 1 处线程池红线风险」),是否处理由用户决定

章节路由表(按需查阅 data/)

当任务命中下列场景时,先定位对应章节文件,再用 Read 工具读取该文件的相关小节,依据条文给出结论或修改建议。不要一次性读取全部 data 文件。

场景关键词章节data 文件
命名风格、常量定义、代码格式、OOP、日期时间、集合处理、并发处理、控制语句、注释规约、前后端规约一、编程规约data/01-coding-standards.md
错误码体系、异常捕获与抛出、try-catch-finally、NPE 防护、日志框架/级别/输出二、异常日志data/02-exception-logging.md
AIR 原则、测试独立性、覆盖率目标、BCDE、Mock、测试目录三、单元测试data/03-unit-testing.md
权限校验、敏感数据脱敏、SQL 注入、XSS、CSRF、参数校验、文件上传、防重放四、安全规约data/04-security-standards.md
建表、字段类型、主键/索引命名、组合索引、分页、count/sum、ORM、resultMap五、MySQL 数据库data/05-mysql-database.md
应用分层(Web/Service/Manager/DAO)、DO/DTO/BO/VO/Query、二方库依赖、GAV、服务器与 JVM六、工程结构data/06-project-structure.md
存储方案评审、用例图/状态图/时序图/类图/活动图、弱依赖与降级、SOLID/DRY、系统设计七、设计规约data/07-design-standards.md
版本历史、专有名词解释(POJO/DO/DTO/NPE/AQS/GAV 等)、错误码全量列表附录data/08-appendix.md

触发词映射表

当用户输入包含以下关键词时,优先查表定位对应章节,无需依赖推理路由:

触发词 / 关键词命中章节
JWT、OAuth2、Token、权限注解、@PreAuthorize、认证、授权、登录态04-security-standards.md(及补充章节)
数据脱敏、加密、加解密、敏感数据、个人信息04-security-standards.md
防重放、重放攻击、时间戳、nonce、签名校验04-security-standards.md
分布式事务、Seata、TCC、Saga、最终一致性07-design-standards.md + 参考微服务专项
服务降级、熔断、Sentinel、Hystrix、@SentinelResource07-design-standards.md
Testcontainers、@SpringBootTest、集成测试、@DynamicPropertySource03-unit-testing.md
Mockito、@Mock、@InjectMocks、单元测试覆盖率、AIR03-unit-testing.md
金额、BigDecimal、精度、舍入、setScale01-coding-standards.md(集合/类型) + 05-mysql-database.md
分页、PageHelper、COUNT 性能、深分页05-mysql-database.md
索引、联合索引、最左前缀、索引下推、覆盖索引05-mysql-database.md
线程池、ThreadPoolExecutor、异步、@Async、CompletableFuture01-coding-standards.md(并发)
锁、synchronized、ReentrantLock、分布式锁、Redisson01-coding-standards.md(并发)
日期、时间、LocalDateTime、Date、SimpleDateFormat、时区01-coding-standards.md(日期时间)
异常、NPE、空指针、try-catch、全局异常处理、@ControllerAdvice02-exception-logging.md
日志、Logback、log4j2、@Slf4j、日志级别、日志规范02-exception-logging.md
分层、Controller、Service、Manager、DAO、DDD、充血模型06-project-structure.md
DO、DTO、VO、BO、POJO、实体转换、MapStruct06-project-structure.md
二方库、GAV、依赖冲突、maven、gradle、pom06-project-structure.md

按使用场景推荐阅读

根据当前任务类型,只读取对应视角的章节,提高效率:

任务类型推荐阅读侧重视角
🖊️ 编写新代码01(编程规约)+ 02(异常日志)编写视角:命名、格式、集合、并发、异常处理等即时决策类规约
🔍 审查存量代码04(安全)+ 05(数据库)+ 06(工程结构)+ 07(设计)审查视角:安全漏洞、事务边界、架构分层、设计合理性等全局判断类规约
🧪 补充单元测试03(单元测试)测试视角:AIR/BCDE 原则、Mock、覆盖率、测试隔离
⚙️ 设计表结构 / 写 SQL05(MySQL 数据库)+ 07(设计规约-存储方案)数据视角:建表规范、索引、SQL 性能、ORM
🏗️ 系统架构 / 模块设计07(设计规约)+ 06(工程结构)架构视角:分层、依赖、降级、图文档
🐛 排查问题 / 分析日志02(异常日志)+ 04(安全)排查视角:日志规范、异常处理、安全审计

规约冲突处理

当同一条代码同时命中多条规约且它们给出的方向不一致时,按以下优先级裁决:

  1. 安全优先【最高】:安全规约优先级高于其他所有规约。涉及数据泄露、越权、注入风险时,其他规约可合理豁免
  2. 强制优先:【强制】> 【推荐】> 【参考】。强制规约覆盖推荐规约
  3. 业务合理豁免:如确因业务场景需要违背某条规约,必须在代码中添加注释说明理由,格式建议:// Alibaba-Java: 豁免原因——<具体理由>
  4. 渐进式改进:重构存量代码时,「保持行为不变」优先于「一次性对齐所有规约」,可规划分阶段完成;但 P0 红线不参与渐进——被改到的代码必须立即合规(见「规约执行策略」)

常见冲突示例

冲突场景裁决
【强制】方法不超 80 行 vs 【推荐】单一职责优先满足单一职责。若拆出的小方法导致类膨胀,是合理的——加注释说明即可
【强制】禁止魔法数字 vs 性能敏感场景需硬编码加具名常量(private static final int MAX_RETRY = 3)而非直接写字面量,两全其美
【强制】禁止 null 返回 vs 远程调用超时可返回 null建议改抛自定义业务异常或返回 Optional,避免调用方 NPE

规约推荐 API 速查(生成 Java 代码时强制使用)

本节为代码生成的「主动应用」清单。 当你在写或修改 Java 代码时,不要等用户问、不要凭默认习惯——下列场景命中时,必须直接采用规约推荐的 API/写法,并在注释中标注「阿里规约」以示区分。这是本 Skill 与模型默认行为拉开差距的关键。表中条目分属 P0/P1(见「规约执行策略」):生成新代码时全部强制套用;修改存量时 P0 行强制、P1 行只约束新写部分。

场景❌ 禁止(反例)✅ 强制使用(正例)对应章节
日期/时间new Date()、new SimpleDateFormat()、CalendarLocalDateTime / LocalDate / Instant + DateTimeFormatter(static final 复用)01-(九)日期时间
入参校验if (id == null) throw new RuntimeException(...) 手写Objects.requireNonNull(id, "id 不能为空") 或 StringUtils.isBlank(id)(依赖 Spring 时用 Assert.hasText)02-(二)NPE 防护
返回空集合return null; 或 return Collections.emptyList() 仅在只读场景return Collections.emptyList(); / List.of() / new ArrayList<>()(需可变时)——禁止返回 null01-(六)集合处理
金额计算double / float、== 比浮点BigDecimal(用 String 构造器)+ compareTo 比大小01-(六)集合处理 + 05-MySQL
并发 Map/Listnew HashMap<>()、new ArrayList<>() 用于多线程ConcurrentHashMap<>() / CopyOnWriteArrayList<> / Collections.synchronizedXxx01-(七)并发处理
字符串比较==、!=.equals()、Objects.equals();忽略大小写用 equalsIgnoreCase01-(一)命名风格
线程创建new Thread() 裸建ThreadPoolExecutor(显式命名线程池)或 CompletableFuture.supplyAsync01-(七)并发处理
ORM 字段映射${} 拼接 SQL、字符串拼接查询条件#{} 参数化 / PreparedStatement / setParameter05-(八)ORM
异常处理catch (Exception e) { } 吞异常、e.printStackTrace()捕获具体类型 + 记日志(log.error("xx 失败", e))+ 抛自定义业务异常02-(三)try-catch
布尔命名boolean flag、Boolean canRun(字段加 is 前缀)字段不加 is 前缀:boolean deleted;方法用 isXxx()/hasXxx():isDeleted()01-(一)命名风格
常量定义魔法数字 if (status == 3)private static final int STATUS_PAID = 3; 具名常量01-(二)常量定义
循环拼接字符串String s = ""; for(...) s += x;StringBuilder.append(...)01-(六)集合处理

应用原则:

  1. 生成代码时默认套用:命中上表场景时,直接写出正例写法,无需询问用户。
  2. review 代码时显式引用:发现反例时,指出违反的章节编号 + 级别(如「违反 01-(九)【强制】」),并给出正例;review 存量代码时按「规约执行策略」的矩阵控制输出详略。
  3. 禁止弱化:即使用户说「简单写一下」,P0/P1 行仍需遵守——可省略注释,但 API 选择不能退化。
  4. 交付自检(P0):输出代码前自检,生成任务的代码与解释中不得出现:Executors.new*ThreadPool、裸 new Thread(、SimpleDateFormat、new Date()/Calendar(日期场景)、${} 拼接 SQL、无 where 的 update/delete、未关闭的资源、空 catch 吞异常、集合方法 return null。命中任意一条,先修复再输出;讲解以正例为主,不在代码块里复述反例写法。

使用方式

  1. 先读执行策略:任何写/改 Java、SQL 代码的任务,先掌握「规约执行策略」(P0 红线 + P1 只管新代码)与「规约推荐 API 速查」,再动手。

  2. 识别任务主题:根据用户问题(写 Java 代码、review、设计表、写 SQL、异常处理、测试等)匹配上表场景关键词。

  3. 按需读取:只 Read 命中的 data/*.md 文件,定位到对应小节(如「(一) 命名风格」「(六) 集合处理」)。

  4. 对照条文:引用规约编号与级别(【强制】/【推荐】/【参考】),给出正例或指出反例风险。

  5. 跨章节场景:如「写一个 Service 方法并设计表」,分别读 01、02、05、06,不要凭记忆作答。

  6. 动态交互(上下文不足时):如果无法从当前对话确定用户项目的技术栈、团队已有规范、或场景边界(如分不清是生产代码还是 Demo),应使用 AskUserQuestion 工具询问开发者,而非自行假设。典型场景:

    • 金额字段精度设计——问「用 BigDecimal 还是 Long(分)?」
    • 新接口幂等需求——问「调用方是否要求幂等?」
    • 代码上下文不明——问「这是生产代码还是原型 Demo?」
  7. 个性化配置:分两层读取,按优先级合并生效。

    第一层 — 个人偏好(memory.md):

    • 读取 memory.md,载入个人跨项目编码习惯(金额类型、Lombok 偏好等)
    • 不存在则跳过

    第二层 — 项目规范(project/<项目名>.md):

    • 从当前工作目录路径推断项目名(取顶层目录名,如 D:\code\物业系统\contract-service → 物业系统)
    • 查找 project/<项目名>.md,若存在则读取并合并到 memory.md 之上
    • 不存在则跳过

初始化流程(首次加载且对应文件不存在时):

  • 扫描项目构建文件(pom.xml/build.gradle)和现有 Java 代码

  • 通过 AskUserQuestion 询问关键偏好(个人 12 个,项目 23 个,其中必含:「存量代码卫生度如何?整洁/一般/混乱」——决定 P1 对存量代码的提示详略,见「规约执行策略」)

  • 写入对应文件,告知开发者已创建

    持续维护:

    • 每次应用规约前按上述合并顺序读取
    • 发现团队隐性规范时,询问是否加入 project/<项目名>.md
    • 发现个人新习惯时,询问是否加入 memory.md
    • 保持更新日志

注意事项

  • 内容源自 PDF 转换,少量排版噪声可能残留,引用时以条文语义为准。
  • 团队已有规范优先于本手册;本手册用于无团队约定或需参考业界实践的场景。
  • 版本:黄山版 1.7.1(2022.02.03),共 7 大维度、附 3 张表(版本历史、专有名词、错误码列表)。

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

报告此技能的问题