{"owner":"binarywang","repo":"WxJava","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md",".github/copilot-instructions.md"],"skills":{"AGENTS.md":"# WxJava Agent 指南\n\n## 适用范围与指令优先级\n\n- 本文件适用于整个仓库，供本地编码 Agent、自动化 Agent 和 Pull Request Review Agent 使用。\n- 开始工作前先阅读与任务直接相关的 `README.md`、`CONTRIBUTING.md`、模块 `pom.xml`、现有实现和测试；不要仅凭通用经验推断项目约定。\n- 若子目录存在更具体的 `AGENTS.md`，处理该目录文件时优先遵循距离目标文件最近的说明。\n- 用户的明确要求优先于本文件；若要求与兼容性、安全性或仓库约定冲突，应先说明风险，不要静默偏离。\n- 只修改完成任务所必需的文件，不处理无关格式、重构或历史遗留问题。\n\n## 项目概览\n\n- WxJava 是面向微信生态的 Java SDK，采用 Maven 多模块结构。\n- 当前根项目要求 Java 8（`maven.compiler.source` 和 `maven.compiler.target` 均为 `1.8`）。除非任务明确要求升级，否则新增代码、依赖和 API 必须保持 Java 8 兼容。\n- 主要 SDK 模块包括：\n  - `weixin-java-common`：各模块共用的基础类型、工具、异常、HTTP 与配置能力。\n  - `weixin-java-mp`：微信公众号。\n  - `weixin-java-miniapp`：微信小程序。\n  - `weixin-java-pay`：微信支付。\n  - `weixin-java-cp`：企业微信。\n  - `weixin-java-open`：微信开放平台。\n  - `weixin-java-channel`：微信视频号、微信小店。\n  - `weixin-java-qidian`：微信客服相关能力。\n  - `weixin-java-aispeech`：微信智能语音。\n  - `weixin-graal`：GraalVM 相关支持。\n- 集成模块主要位于：\n  - `spring-boot-starters`：Spring Boot Starter 及多账号 Starter。\n  - `solon-plugins`：Solon 插件及多账号插件。\n  - `wx-java-bom`：统一管理对外模块版本的 BOM。\n- `README.md` 说明整体能力和使用方式，`CONTRIBUTING.md` 规定代码贡献要求，`docs` 保存补充文档。\n\n## 开发流程\n\n1. 确认任务涉及的微信产品和 Maven 模块，先查找同模块中的相似接口、Bean、实现类和测试。\n2. 阅读目标模块及其父级 `pom.xml`，确认依赖、测试框架和已有实现方式。\n3. 优先沿用现有的包结构、命名、序列化、HTTP 执行器、异常处理及配置模式。\n4. 以最小变更完成任务；不要在功能修改中夹带依赖升级、全局格式化或无关重构。\n5. 为修复或新增行为添加有针对性的测试，并先运行受影响模块的验证。\n6. 交付前检查 diff、测试结果、兼容性和文档影响，明确报告未执行或无法执行的验证。\n\n## 代码风格与兼容性\n\n- 遵循 `.editorconfig`：使用空格缩进、缩进宽度为 2、UTF-8、LF、文件末尾保留换行，并清除非 Markdown 文件的行尾空格。\n- 保持目标文件现有代码风格；避免仅为个人偏好调整 import、换行、注释或成员顺序。\n- 不使用 Java 9 及以上语言特性或仅在新版本 JDK 中存在的 API。\n- 项目使用 Lombok；新增或修改 Lombok 用法时遵循相邻代码模式，不要在同一变更中无理由改写为手工样板代码。\n- 公共 API、序列化字段、枚举值、常量、默认实现和依赖范围都可能影响下游用户，修改时优先保持源码、二进制和行为兼容。\n- 不要随意改变已有异常类型、空值语义、默认 HTTP 客户端、JSON/XML 映射或配置加载行为。\n- 新增依赖前先确认现有依赖能否满足需求；依赖版本应在合适的父 POM 或 BOM 中统一管理，避免模块间版本漂移。\n\n## API 与实现约定\n\n- 对接微信接口时，以对应产品的官方接口定义和仓库内现有同类实现为依据，核对请求路径、HTTP 方法、字段名、必填项和返回结构。\n- Java 字段名可以符合项目命名习惯，但传输层字段名必须与微信接口保持一致；需要时使用项目现有的 Gson、Jackson 或 XStream 映射方式。\n- 新增 Service API 时同步检查接口、实现类、请求/响应 Bean、URL 常量、序列化适配器和测试是否都需要更新。\n- 涉及多个 HTTP 客户端实现时，保持 Apache HttpClient、HttpComponents、OkHttp 和 Jodd 等现有实现的能力一致；不要只修复其中一种而遗漏其他可选实现。\n- 涉及 Starter 或插件时，检查单账号与多账号版本以及自动配置、配置属性和示例测试是否需要同步。\n- 公共方法需要清晰的 Javadoc，至少准确描述参数、返回值、异常和必要约束；不要编写与实现不一致的模板化注释。\n- 不吞掉异常，不使用空 `catch`，不在日志中泄露 token、secret、密钥、签名原文或用户敏感数据。\n\n## 测试与验证\n\n- 项目测试主要使用 TestNG；沿用目标模块已有测试基类、数据提供器、Mock 方式和资源布局。\n- 修复 bug 时应添加能够复现旧行为并验证修复结果的回归测试；新增公共方法必须配套单元测试。\n- 优先执行受影响模块及其依赖的测试：\n\n```shell\nmvn -pl <module> -am test\n```\n\n- 运行单个测试类时，可在对应模块范围内执行：\n\n```shell\nmvn -pl <module> -am -Dtest=<TestClass> -Dsurefire.failIfNoSpecifiedTests=false test\n```\n\n- 跨公共模块、父 POM、BOM 或多个产品模块的变更应扩大验证范围；条件允许时执行：\n\n```shell\nmvn test\n```\n\n- 对仅需确认编译且测试依赖外部凭据的场景，可执行模块级编译或打包，但不得把跳过测试的构建描述为“测试通过”。\n- 部分测试可能依赖微信凭据、网络或本地配置。不得提交真实凭据；无法运行时应说明原因以及已完成的替代验证。\n- 完成前至少运行 `git diff --check`，并人工检查 `git diff`，确认没有意外文件、调试代码、生成物或敏感信息。\n\n## 文档与依赖变更\n\n- 用户可见的 API、配置项、模块使用方式或兼容性发生变化时，同步更新相关 Javadoc、README 或 `docs` 文档。\n- 示例中的版本号、模块名和配置键应与当前项目保持一致；不要复制未经验证的外部示例。\n- 修改根 POM、父 POM 或 `wx-java-bom` 时，检查所有子模块和对外依赖管理的影响。\n- 不提交构建输出、IDE 临时文件、测试报告、真实配置文件或本地备份文件。\n\n## Git 与 Pull Request 规范\n\n- 贡献目标分支为 `develop`；`release` 用于正式版本发布，不应作为常规 Pull Request 的目标分支。\n- 提交前保持工作区变更聚焦，不覆盖或回退用户已有的无关修改。\n- Commit 和 Pull Request 应说明变更动机、影响模块、兼容性风险和验证方式；关联已有 Issue 时写明编号。\n- 不得在未经用户明确授权的情况下执行 `git push`、创建或合并 Pull Request、改写历史或执行破坏性 Git 操作。\n- 不要使用 `git reset --hard`、强制 checkout 等方式清理不属于当前任务的改动。\n\n## 安全与敏感数据\n\n- 禁止提交 AppID 对应的 secret、access token、API v3 密钥、商户私钥、证书私钥、用户数据或其他真实凭据。\n- 测试和文档使用明显的占位值或脱敏数据；日志应避免输出查询串、请求体或响应体中的敏感字段。\n- 涉及签名、验签、加解密、证书、回调通知和支付金额时，重点检查字符编码、字段排序、精度、时区、重放风险和资源关闭。\n- 涉及网络请求、文件或流时，检查超时、异常路径、资源释放、响应关闭和大数据量下的内存行为。\n\n## Review 指南\n\n- 重点检查空指针、并发、资源释放、兼容性问题。\n- 不要只做代码风格建议，优先指出真实 bug 和回归风险。\n- 所有 Pull Request Review 的总结、结论和行内评论必须使用简体中文。\n- 技术标识符、类名、方法名、变量名、日志、错误信息及代码片段保持原文，不要翻译。\n- 严重程度标识可以保留 `P0`、`P1`、`P2` 等英文缩写。\n- 如果没有发现需要阻止合并的问题，也必须使用简体中文给出结论。\n- Review 结论必须基于当前 diff 和仓库中可验证的行为；不确定时明确说明假设，不要把推测写成确定缺陷。\n- 仅报告由本次变更引入或暴露、且作者可以采取行动的问题，并指出具体文件、位置、触发条件和影响。\n- 重点关注微信接口契约、Java 8 兼容性、公共 API 兼容性、序列化字段、HTTP 客户端实现一致性、Starter 多账号场景及敏感信息泄露。\n- 不要仅因缺少全仓库测试、个人风格偏好或与本次变更无关的历史代码而阻止合并。\n\n## Agent 完成检查清单\n\n- 已确认并遵循相关模块、相邻代码和更具体的 `AGENTS.md`。\n- 变更范围与任务直接相关，没有覆盖用户的无关修改。\n- 新增代码保持 Java 8、公共 API 和序列化兼容性。\n- 必要的测试与文档已经更新。\n- 已执行与风险匹配的构建或测试，并如实记录结果。\n- 已检查完整 diff、格式、生成物和敏感信息。\n- 最终回复使用简体中文，简要列出修改内容、验证结果和任何剩余风险。\n",".github/copilot-instructions.md":"# Copilot Instruction\n请始终使用中文生成 Pull Request 的标题、描述和提交信息\n\n\n# WxJava - 微信 Java SDK 开发说明\n\nWxJava 是一个支持多种微信平台的完整 Java SDK，包含公众号、小程序、微信支付、企业微信、开放平台、视频号、企点等多种功能模块。\n\n**请始终优先参考本说明，只有在遇到与此内容不一致的意外信息时，才退而使用搜索或 bash 命令。**\n\n## 高效开发指南\n\n### 前置条件与环境准备\n- **Java 要求**：JDK 8+（项目最低目标为 Java 8）\n- **Maven**：推荐 Maven 3.6+（已验证 Maven 3.9.11）\n- **IDE**：推荐使用 IntelliJ IDEA（项目针对 IDEA 优化）\n\n### 引导、构建与校验\n克隆仓库后按顺序执行以下命令：\n\n```bash\n# 1. 基础编译（请勿中断 - 约需 4-5 分钟）\nmvn clean compile -DskipTests=true --no-transfer-progress\n# 超时时间：建议设置 8 分钟以上。实际时间：约 4 分钟\n\n# 2. 完整打包（请勿中断 - 约需 2-3 分钟）  \nmvn clean package -DskipTests=true --no-transfer-progress\n# 超时时间：建议设置 5 分钟以上。实际时间：约 2 分钟\n\n# 3. 代码质量校验（请勿中断 - 约需 45-60 秒）\nmvn checkstyle:check --no-transfer-progress\n# 超时时间：建议设置 3 分钟以上。实际时间：约 50 秒\n```\n\n重要时间说明：\n- 绝对不要中断任意 Maven 构建命令\n- 编译阶段耗时最长（约 4 分钟），原因是项目包含 34 个模块\n- 后续构建会更快，因为存在增量编译\n- 始终使用 `--no-transfer-progress` 以减少日志噪音\n\n### 测试结构\n- **测试框架**：TestNG（非 JUnit）\n- **测试文件**：共有 298 个测试文件\n- **默认行为**：pom.xml 中默认禁用测试（`<skip>true</skip>`）\n- **测试配置**：测试需要通过 test-config.xml 提供真实的微信 API 凭据\n- **注意**：没有真实微信 API 凭据请不要尝试运行测试，测试将会失败\n\n## 项目结构与导航\n\n### 核心 SDK 模块（主要开发区）\n- `weixin-java-common/` - 通用工具与基础类（最重要）\n- `weixin-java-mp/` - 公众号 SDK\n- `weixin-java-pay/` - 微信支付 SDK\n- `weixin-java-miniapp/` - 小程序 SDK\n- `weixin-java-cp/` - 企业微信 SDK\n- `weixin-java-open/` - 开放平台 SDK\n- `weixin-java-channel/` - 视频号 / Channel SDK\n- `weixin-java-qidian/` - 企点 SDK\n\n### 框架集成模块\n- `spring-boot-starters/` - Spring Boot 自动配置 starter\n- `solon-plugins/` - Solon 框架插件\n- `weixin-graal/` - GraalVM 本地镜像支持\n\n### 配置与质量控制\n- `quality-checks/google_checks.xml` - Checkstyle 配置\n- `.editorconfig` - 代码格式规则（2 个空格等于 1 个制表）\n- `pom.xml` - 根级 Maven 配置\n\n## 开发工作流\n\n### 修改代码的流程\n1. 修改前务必先构建以建立干净基线：\n   ```bash\n   mvn clean compile --no-transfer-progress\n   ```\n\n2. 遵循代码风格（由 checkstyle 强制）：\n   - 缩进使用 2 个空格（不要用制表符）\n   - 遵循 Google Java 风格指南\n   - 在 IDE 中安装 EditorConfig 插件\n\n3. 增量验证修改：\n   ```bash\n   # 每次修改后运行：\n   mvn compile --no-transfer-progress\n   mvn checkstyle:check --no-transfer-progress\n   ```\n\n### 提交修改前的必须校验\n请务必按顺序完成以下校验步骤：\n\n1. 代码风格校验：\n   ```bash\n   mvn checkstyle:check --no-transfer-progress\n   # 必须通过 - 约需 50 秒\n   ```\n\n2. 完整清理构建：\n   ```bash\n   mvn clean package -DskipTests=true --no-transfer-progress  \n   # 必须成功 - 约需 2 分钟\n   ```\n\n3. 文档：为公共方法和类补充或更新 javadoc\n4. 贡献规范：遵循 `CONTRIBUTING.md`，Pull Request 必须以 `develop` 分支为目标\n\n## 模块依赖与构建顺序\n\n### 核心模块依赖（构建顺序）\n1. `weixin-graal`（GraalVM 支持）\n2. `weixin-java-common`（所有模块的基础）\n3. 核心 SDK 模块（mp、pay、miniapp、cp、open、channel、qidian）\n4. 框架集成（spring-boot-starters、solon-plugins）\n\n### 主要关系模式\n- 所有 SDK 模块都依赖于 `weixin-java-common`\n- Spring Boot starters 依赖对应的 SDK 模块\n- Solon 插件遵循与 Spring Boot starters 相同的依赖模式\n- 每个模块都有单账号与多账号配置支持\n\n## 常见任务与命令\n\n### 验证指定模块\n```bash\n# 构建单个模块（将 'weixin-java-mp' 替换为目标模块）：\ncd weixin-java-mp\nmvn clean compile --no-transfer-progress\n```\n\n### 检查依赖\n```bash\n# 分析依赖树：\nmvn dependency:tree --no-transfer-progress\n\n# 检查依赖更新：  \n./others/check-dependency-updates.sh\n```\n\n### 发布与发布准备\n```bash\n# 版本检查：\nmvn versions:display-property-updates --no-transfer-progress\n\n# 部署（需要凭据）：\nmvn clean deploy -P release --no-transfer-progress\n```\n\n## 重要文件与位置\n\n### 配置文件\n- `pom.xml` - 根级 Maven 配置与依赖管理\n- `quality-checks/google_checks.xml` - Checkstyle 规则\n- `.editorconfig` - IDE 格式化配置\n- `.github/workflows/maven-publish.yml` - CI/CD 工作流\n\n### 文档\n- `README.md` - 项目概览与使用说明（中文）\n- `CONTRIBUTING.md` - 贡献指南\n- `demo.md` - 示例项目与演示链接\n- 每个模块均有单独的文档与示例\n\n### 测试资源\n- `*/src/test/resources/test-config.sample.xml` - 测试配置模板\n- 测试运行需要真实的微信 API 凭据\n\n## SDK 使用模式\n\n### Maven 依赖示例\n```xml\n<dependency>\n  <groupId>com.github.binarywang</groupId>\n  <artifactId>weixin-java-mp</artifactId>  <!-- 或其他模块 -->\n  <version>4.7.0</version>\n</dependency>\n```\n\n### 常见开发区域\n- **API 客户端实现**：位于 `*/service/impl/` 目录\n- **模型类**：位于 `*/bean/` 目录\n- **配置**：位于 `*/config/` 目录\n- **工具类**：位于 `weixin-java-common` 的 `*/util/` 目录\n\n## 故障排查\n\n### 构建问题\n- **OutOfMemoryError**：增加 Maven 内存：`export MAVEN_OPTS=\"-Xmx2g\"`\n- **编译失败**：通常为依赖问题 - 先执行 `mvn clean`\n- **Checkstyle 失败**：检查 IDE 的 `.editorconfig` 设置\n\n### 常见陷阱\n- **测试默认跳过**：这是正常现象 — 测试需要微信 API 凭据\n- **多模块变更**：总是在仓库根目录构建，而不是单独模块\n- **分支目标**：Pull Request 必须以 `develop` 分支为目标，而不是 `master` 或 `release`\n\n## 性能说明\n- **首次构建**：由于依赖下载，耗时 4-5 分钟\n- **增量构建**：通常更快（约 30-60 秒）\n- **Checkstyle**：运行迅速（约 50 秒），应当经常运行\n- **IDE 性能**：项目使用 Lombok，请确保启用注解处理\n\n注意：本项目为 SDK 库项目，而非可运行应用。修改应以 API 功能为主，不要改动应用级行为。\n"},"files":{"AGENTS.md":"# WxJava Agent 指南\n\n## 适用范围与指令优先级\n\n- 本文件适用于整个仓库，供本地编码 Agent、自动化 Agent 和 Pull Request Review Agent 使用。\n- 开始工作前先阅读与任务直接相关的 `README.md`、`CONTRIBUTING.md`、模块 `pom.xml`、现有实现和测试；不要仅凭通用经验推断项目约定。\n- 若子目录存在更具体的 `AGENTS.md`，处理该目录文件时优先遵循距离目标文件最近的说明。\n- 用户的明确要求优先于本文件；若要求与兼容性、安全性或仓库约定冲突，应先说明风险，不要静默偏离。\n- 只修改完成任务所必需的文件，不处理无关格式、重构或历史遗留问题。\n\n## 项目概览\n\n- WxJava 是面向微信生态的 Java SDK，采用 Maven 多模块结构。\n- 当前根项目要求 Java 8（`maven.compiler.source` 和 `maven.compiler.target` 均为 `1.8`）。除非任务明确要求升级，否则新增代码、依赖和 API 必须保持 Java 8 兼容。\n- 主要 SDK 模块包括：\n  - `weixin-java-common`：各模块共用的基础类型、工具、异常、HTTP 与配置能力。\n  - `weixin-java-mp`：微信公众号。\n  - `weixin-java-miniapp`：微信小程序。\n  - `weixin-java-pay`：微信支付。\n  - `weixin-java-cp`：企业微信。\n  - `weixin-java-open`：微信开放平台。\n  - `weixin-java-channel`：微信视频号、微信小店。\n  - `weixin-java-qidian`：微信客服相关能力。\n  - `weixin-java-aispeech`：微信智能语音。\n  - `weixin-graal`：GraalVM 相关支持。\n- 集成模块主要位于：\n  - `spring-boot-starters`：Spring Boot Starter 及多账号 Starter。\n  - `solon-plugins`：Solon 插件及多账号插件。\n  - `wx-java-bom`：统一管理对外模块版本的 BOM。\n- `README.md` 说明整体能力和使用方式，`CONTRIBUTING.md` 规定代码贡献要求，`docs` 保存补充文档。\n\n## 开发流程\n\n1. 确认任务涉及的微信产品和 Maven 模块，先查找同模块中的相似接口、Bean、实现类和测试。\n2. 阅读目标模块及其父级 `pom.xml`，确认依赖、测试框架和已有实现方式。\n3. 优先沿用现有的包结构、命名、序列化、HTTP 执行器、异常处理及配置模式。\n4. 以最小变更完成任务；不要在功能修改中夹带依赖升级、全局格式化或无关重构。\n5. 为修复或新增行为添加有针对性的测试，并先运行受影响模块的验证。\n6. 交付前检查 diff、测试结果、兼容性和文档影响，明确报告未执行或无法执行的验证。\n\n## 代码风格与兼容性\n\n- 遵循 `.editorconfig`：使用空格缩进、缩进宽度为 2、UTF-8、LF、文件末尾保留换行，并清除非 Markdown 文件的行尾空格。\n- 保持目标文件现有代码风格；避免仅为个人偏好调整 import、换行、注释或成员顺序。\n- 不使用 Java 9 及以上语言特性或仅在新版本 JDK 中存在的 API。\n- 项目使用 Lombok；新增或修改 Lombok 用法时遵循相邻代码模式，不要在同一变更中无理由改写为手工样板代码。\n- 公共 API、序列化字段、枚举值、常量、默认实现和依赖范围都可能影响下游用户，修改时优先保持源码、二进制和行为兼容。\n- 不要随意改变已有异常类型、空值语义、默认 HTTP 客户端、JSON/XML 映射或配置加载行为。\n- 新增依赖前先确认现有依赖能否满足需求；依赖版本应在合适的父 POM 或 BOM 中统一管理，避免模块间版本漂移。\n\n## API 与实现约定\n\n- 对接微信接口时，以对应产品的官方接口定义和仓库内现有同类实现为依据，核对请求路径、HTTP 方法、字段名、必填项和返回结构。\n- Java 字段名可以符合项目命名习惯，但传输层字段名必须与微信接口保持一致；需要时使用项目现有的 Gson、Jackson 或 XStream 映射方式。\n- 新增 Service API 时同步检查接口、实现类、请求/响应 Bean、URL 常量、序列化适配器和测试是否都需要更新。\n- 涉及多个 HTTP 客户端实现时，保持 Apache HttpClient、HttpComponents、OkHttp 和 Jodd 等现有实现的能力一致；不要只修复其中一种而遗漏其他可选实现。\n- 涉及 Starter 或插件时，检查单账号与多账号版本以及自动配置、配置属性和示例测试是否需要同步。\n- 公共方法需要清晰的 Javadoc，至少准确描述参数、返回值、异常和必要约束；不要编写与实现不一致的模板化注释。\n- 不吞掉异常，不使用空 `catch`，不在日志中泄露 token、secret、密钥、签名原文或用户敏感数据。\n\n## 测试与验证\n\n- 项目测试主要使用 TestNG；沿用目标模块已有测试基类、数据提供器、Mock 方式和资源布局。\n- 修复 bug 时应添加能够复现旧行为并验证修复结果的回归测试；新增公共方法必须配套单元测试。\n- 优先执行受影响模块及其依赖的测试：\n\n```shell\nmvn -pl <module> -am test\n```\n\n- 运行单个测试类时，可在对应模块范围内执行：\n\n```shell\nmvn -pl <module> -am -Dtest=<TestClass> -Dsurefire.failIfNoSpecifiedTests=false test\n```\n\n- 跨公共模块、父 POM、BOM 或多个产品模块的变更应扩大验证范围；条件允许时执行：\n\n```shell\nmvn test\n```\n\n- 对仅需确认编译且测试依赖外部凭据的场景，可执行模块级编译或打包，但不得把跳过测试的构建描述为“测试通过”。\n- 部分测试可能依赖微信凭据、网络或本地配置。不得提交真实凭据；无法运行时应说明原因以及已完成的替代验证。\n- 完成前至少运行 `git diff --check`，并人工检查 `git diff`，确认没有意外文件、调试代码、生成物或敏感信息。\n\n## 文档与依赖变更\n\n- 用户可见的 API、配置项、模块使用方式或兼容性发生变化时，同步更新相关 Javadoc、README 或 `docs` 文档。\n- 示例中的版本号、模块名和配置键应与当前项目保持一致；不要复制未经验证的外部示例。\n- 修改根 POM、父 POM 或 `wx-java-bom` 时，检查所有子模块和对外依赖管理的影响。\n- 不提交构建输出、IDE 临时文件、测试报告、真实配置文件或本地备份文件。\n\n## Git 与 Pull Request 规范\n\n- 贡献目标分支为 `develop`；`release` 用于正式版本发布，不应作为常规 Pull Request 的目标分支。\n- 提交前保持工作区变更聚焦，不覆盖或回退用户已有的无关修改。\n- Commit 和 Pull Request 应说明变更动机、影响模块、兼容性风险和验证方式；关联已有 Issue 时写明编号。\n- 不得在未经用户明确授权的情况下执行 `git push`、创建或合并 Pull Request、改写历史或执行破坏性 Git 操作。\n- 不要使用 `git reset --hard`、强制 checkout 等方式清理不属于当前任务的改动。\n\n## 安全与敏感数据\n\n- 禁止提交 AppID 对应的 secret、access token、API v3 密钥、商户私钥、证书私钥、用户数据或其他真实凭据。\n- 测试和文档使用明显的占位值或脱敏数据；日志应避免输出查询串、请求体或响应体中的敏感字段。\n- 涉及签名、验签、加解密、证书、回调通知和支付金额时，重点检查字符编码、字段排序、精度、时区、重放风险和资源关闭。\n- 涉及网络请求、文件或流时，检查超时、异常路径、资源释放、响应关闭和大数据量下的内存行为。\n\n## Review 指南\n\n- 重点检查空指针、并发、资源释放、兼容性问题。\n- 不要只做代码风格建议，优先指出真实 bug 和回归风险。\n- 所有 Pull Request Review 的总结、结论和行内评论必须使用简体中文。\n- 技术标识符、类名、方法名、变量名、日志、错误信息及代码片段保持原文，不要翻译。\n- 严重程度标识可以保留 `P0`、`P1`、`P2` 等英文缩写。\n- 如果没有发现需要阻止合并的问题，也必须使用简体中文给出结论。\n- Review 结论必须基于当前 diff 和仓库中可验证的行为；不确定时明确说明假设，不要把推测写成确定缺陷。\n- 仅报告由本次变更引入或暴露、且作者可以采取行动的问题，并指出具体文件、位置、触发条件和影响。\n- 重点关注微信接口契约、Java 8 兼容性、公共 API 兼容性、序列化字段、HTTP 客户端实现一致性、Starter 多账号场景及敏感信息泄露。\n- 不要仅因缺少全仓库测试、个人风格偏好或与本次变更无关的历史代码而阻止合并。\n\n## Agent 完成检查清单\n\n- 已确认并遵循相关模块、相邻代码和更具体的 `AGENTS.md`。\n- 变更范围与任务直接相关，没有覆盖用户的无关修改。\n- 新增代码保持 Java 8、公共 API 和序列化兼容性。\n- 必要的测试与文档已经更新。\n- 已执行与风险匹配的构建或测试，并如实记录结果。\n- 已检查完整 diff、格式、生成物和敏感信息。\n- 最终回复使用简体中文，简要列出修改内容、验证结果和任何剩余风险。\n",".github/copilot-instructions.md":"# Copilot Instruction\n请始终使用中文生成 Pull Request 的标题、描述和提交信息\n\n\n# WxJava - 微信 Java SDK 开发说明\n\nWxJava 是一个支持多种微信平台的完整 Java SDK，包含公众号、小程序、微信支付、企业微信、开放平台、视频号、企点等多种功能模块。\n\n**请始终优先参考本说明，只有在遇到与此内容不一致的意外信息时，才退而使用搜索或 bash 命令。**\n\n## 高效开发指南\n\n### 前置条件与环境准备\n- **Java 要求**：JDK 8+（项目最低目标为 Java 8）\n- **Maven**：推荐 Maven 3.6+（已验证 Maven 3.9.11）\n- **IDE**：推荐使用 IntelliJ IDEA（项目针对 IDEA 优化）\n\n### 引导、构建与校验\n克隆仓库后按顺序执行以下命令：\n\n```bash\n# 1. 基础编译（请勿中断 - 约需 4-5 分钟）\nmvn clean compile -DskipTests=true --no-transfer-progress\n# 超时时间：建议设置 8 分钟以上。实际时间：约 4 分钟\n\n# 2. 完整打包（请勿中断 - 约需 2-3 分钟）  \nmvn clean package -DskipTests=true --no-transfer-progress\n# 超时时间：建议设置 5 分钟以上。实际时间：约 2 分钟\n\n# 3. 代码质量校验（请勿中断 - 约需 45-60 秒）\nmvn checkstyle:check --no-transfer-progress\n# 超时时间：建议设置 3 分钟以上。实际时间：约 50 秒\n```\n\n重要时间说明：\n- 绝对不要中断任意 Maven 构建命令\n- 编译阶段耗时最长（约 4 分钟），原因是项目包含 34 个模块\n- 后续构建会更快，因为存在增量编译\n- 始终使用 `--no-transfer-progress` 以减少日志噪音\n\n### 测试结构\n- **测试框架**：TestNG（非 JUnit）\n- **测试文件**：共有 298 个测试文件\n- **默认行为**：pom.xml 中默认禁用测试（`<skip>true</skip>`）\n- **测试配置**：测试需要通过 test-config.xml 提供真实的微信 API 凭据\n- **注意**：没有真实微信 API 凭据请不要尝试运行测试，测试将会失败\n\n## 项目结构与导航\n\n### 核心 SDK 模块（主要开发区）\n- `weixin-java-common/` - 通用工具与基础类（最重要）\n- `weixin-java-mp/` - 公众号 SDK\n- `weixin-java-pay/` - 微信支付 SDK\n- `weixin-java-miniapp/` - 小程序 SDK\n- `weixin-java-cp/` - 企业微信 SDK\n- `weixin-java-open/` - 开放平台 SDK\n- `weixin-java-channel/` - 视频号 / Channel SDK\n- `weixin-java-qidian/` - 企点 SDK\n\n### 框架集成模块\n- `spring-boot-starters/` - Spring Boot 自动配置 starter\n- `solon-plugins/` - Solon 框架插件\n- `weixin-graal/` - GraalVM 本地镜像支持\n\n### 配置与质量控制\n- `quality-checks/google_checks.xml` - Checkstyle 配置\n- `.editorconfig` - 代码格式规则（2 个空格等于 1 个制表）\n- `pom.xml` - 根级 Maven 配置\n\n## 开发工作流\n\n### 修改代码的流程\n1. 修改前务必先构建以建立干净基线：\n   ```bash\n   mvn clean compile --no-transfer-progress\n   ```\n\n2. 遵循代码风格（由 checkstyle 强制）：\n   - 缩进使用 2 个空格（不要用制表符）\n   - 遵循 Google Java 风格指南\n   - 在 IDE 中安装 EditorConfig 插件\n\n3. 增量验证修改：\n   ```bash\n   # 每次修改后运行：\n   mvn compile --no-transfer-progress\n   mvn checkstyle:check --no-transfer-progress\n   ```\n\n### 提交修改前的必须校验\n请务必按顺序完成以下校验步骤：\n\n1. 代码风格校验：\n   ```bash\n   mvn checkstyle:check --no-transfer-progress\n   # 必须通过 - 约需 50 秒\n   ```\n\n2. 完整清理构建：\n   ```bash\n   mvn clean package -DskipTests=true --no-transfer-progress  \n   # 必须成功 - 约需 2 分钟\n   ```\n\n3. 文档：为公共方法和类补充或更新 javadoc\n4. 贡献规范：遵循 `CONTRIBUTING.md`，Pull Request 必须以 `develop` 分支为目标\n\n## 模块依赖与构建顺序\n\n### 核心模块依赖（构建顺序）\n1. `weixin-graal`（GraalVM 支持）\n2. `weixin-java-common`（所有模块的基础）\n3. 核心 SDK 模块（mp、pay、miniapp、cp、open、channel、qidian）\n4. 框架集成（spring-boot-starters、solon-plugins）\n\n### 主要关系模式\n- 所有 SDK 模块都依赖于 `weixin-java-common`\n- Spring Boot starters 依赖对应的 SDK 模块\n- Solon 插件遵循与 Spring Boot starters 相同的依赖模式\n- 每个模块都有单账号与多账号配置支持\n\n## 常见任务与命令\n\n### 验证指定模块\n```bash\n# 构建单个模块（将 'weixin-java-mp' 替换为目标模块）：\ncd weixin-java-mp\nmvn clean compile --no-transfer-progress\n```\n\n### 检查依赖\n```bash\n# 分析依赖树：\nmvn dependency:tree --no-transfer-progress\n\n# 检查依赖更新：  \n./others/check-dependency-updates.sh\n```\n\n### 发布与发布准备\n```bash\n# 版本检查：\nmvn versions:display-property-updates --no-transfer-progress\n\n# 部署（需要凭据）：\nmvn clean deploy -P release --no-transfer-progress\n```\n\n## 重要文件与位置\n\n### 配置文件\n- `pom.xml` - 根级 Maven 配置与依赖管理\n- `quality-checks/google_checks.xml` - Checkstyle 规则\n- `.editorconfig` - IDE 格式化配置\n- `.github/workflows/maven-publish.yml` - CI/CD 工作流\n\n### 文档\n- `README.md` - 项目概览与使用说明（中文）\n- `CONTRIBUTING.md` - 贡献指南\n- `demo.md` - 示例项目与演示链接\n- 每个模块均有单独的文档与示例\n\n### 测试资源\n- `*/src/test/resources/test-config.sample.xml` - 测试配置模板\n- 测试运行需要真实的微信 API 凭据\n\n## SDK 使用模式\n\n### Maven 依赖示例\n```xml\n<dependency>\n  <groupId>com.github.binarywang</groupId>\n  <artifactId>weixin-java-mp</artifactId>  <!-- 或其他模块 -->\n  <version>4.7.0</version>\n</dependency>\n```\n\n### 常见开发区域\n- **API 客户端实现**：位于 `*/service/impl/` 目录\n- **模型类**：位于 `*/bean/` 目录\n- **配置**：位于 `*/config/` 目录\n- **工具类**：位于 `weixin-java-common` 的 `*/util/` 目录\n\n## 故障排查\n\n### 构建问题\n- **OutOfMemoryError**：增加 Maven 内存：`export MAVEN_OPTS=\"-Xmx2g\"`\n- **编译失败**：通常为依赖问题 - 先执行 `mvn clean`\n- **Checkstyle 失败**：检查 IDE 的 `.editorconfig` 设置\n\n### 常见陷阱\n- **测试默认跳过**：这是正常现象 — 测试需要微信 API 凭据\n- **多模块变更**：总是在仓库根目录构建，而不是单独模块\n- **分支目标**：Pull Request 必须以 `develop` 分支为目标，而不是 `master` 或 `release`\n\n## 性能说明\n- **首次构建**：由于依赖下载，耗时 4-5 分钟\n- **增量构建**：通常更快（约 30-60 秒）\n- **Checkstyle**：运行迅速（约 50 秒），应当经常运行\n- **IDE 性能**：项目使用 Lombok，请确保启用注解处理\n\n注意：本项目为 SDK 库项目，而非可运行应用。修改应以 API 功能为主，不要改动应用级行为。\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# WxJava Agent 指南\n\n## 适用范围与指令优先级\n\n- 本文件适用于整个仓库，供本地编码 Agent、自动化 Agent 和 Pull Request Review Agent 使用。\n- 开始工作前先阅读与任务直接相关的 `README.md`、`CONTRIBUTING.md`、模块 `pom.xml`、现有实现和测试；不要仅凭通用经验推断项目约定。\n- 若子目录存在更具体的 `AGENTS.md`，处理该目录文件时优先遵循距离目标文件最近的说明。\n- 用户的明确要求优先于本文件；若要求与兼容性、安全性或仓库约定冲突，应先说明风险，不要静默偏离。\n- 只修改完成任务所必需的文件，不处理无关格式、重构或历史遗留问题。\n\n## 项目概览\n\n- WxJava 是面向微信生态的 Java SDK，采用 Maven 多模块结构。\n- 当前根项目要求 Java 8（`maven.compiler.source` 和 `maven.compiler.target` 均为 `1.8`）。除非任务明确要求升级，否则新增代码、依赖和 API 必须保持 Java 8 兼容。\n- 主要 SDK 模块包括：\n  - `weixin-java-common`：各模块共用的基础类型、工具、异常、HTTP 与配置能力。\n  - `weixin-java-mp`：微信公众号。\n  - `weixin-java-miniapp`：微信小程序。\n  - `weixin-java-pay`：微信支付。\n  - `weixin-java-cp`：企业微信。\n  - `weixin-java-open`：微信开放平台。\n  - `weixin-java-channel`：微信视频号、微信小店。\n  - `weixin-java-qidian`：微信客服相关能力。\n  - `weixin-java-aispeech`：微信智能语音。\n  - `weixin-graal`：GraalVM 相关支持。\n- 集成模块主要位于：\n  - `spring-boot-starters`：Spring Boot Starter 及多账号 Starter。\n  - `solon-plugins`：Solon 插件及多账号插件。\n  - `wx-java-bom`：统一管理对外模块版本的 BOM。\n- `README.md` 说明整体能力和使用方式，`CONTRIBUTING.md` 规定代码贡献要求，`docs` 保存补充文档。\n\n## 开发流程\n\n1. 确认任务涉及的微信产品和 Maven 模块，先查找同模块中的相似接口、Bean、实现类和测试。\n2. 阅读目标模块及其父级 `pom.xml`，确认依赖、测试框架和已有实现方式。\n3. 优先沿用现有的包结构、命名、序列化、HTTP 执行器、异常处理及配置模式。\n4. 以最小变更完成任务；不要在功能修改中夹带依赖升级、全局格式化或无关重构。\n5. 为修复或新增行为添加有针对性的测试，并先运行受影响模块的验证。\n6. 交付前检查 diff、测试结果、兼容性和文档影响，明确报告未执行或无法执行的验证。\n\n## 代码风格与兼容性\n\n- 遵循 `.editorconfig`：使用空格缩进、缩进宽度为 2、UTF-8、LF、文件末尾保留换行，并清除非 Markdown 文件的行尾空格。\n- 保持目标文件现有代码风格；避免仅为个人偏好调整 import、换行、注释或成员顺序。\n- 不使用 Java 9 及以上语言特性或仅在新版本 JDK 中存在的 API。\n- 项目使用 Lombok；新增或修改 Lombok 用法时遵循相邻代码模式，不要在同一变更中无理由改写为手工样板代码。\n- 公共 API、序列化字段、枚举值、常量、默认实现和依赖范围都可能影响下游用户，修改时优先保持源码、二进制和行为兼容。\n- 不要随意改变已有异常类型、空值语义、默认 HTTP 客户端、JSON/XML 映射或配置加载行为。\n- 新增依赖前先确认现有依赖能否满足需求；依赖版本应在合适的父 POM 或 BOM 中统一管理，避免模块间版本漂移。\n\n## API 与实现约定\n\n- 对接微信接口时，以对应产品的官方接口定义和仓库内现有同类实现为依据，核对请求路径、HTTP 方法、字段名、必填项和返回结构。\n- Java 字段名可以符合项目命名习惯，但传输层字段名必须与微信接口保持一致；需要时使用项目现有的 Gson、Jackson 或 XStream 映射方式。\n- 新增 Service API 时同步检查接口、实现类、请求/响应 Bean、URL 常量、序列化适配器和测试是否都需要更新。\n- 涉及多个 HTTP 客户端实现时，保持 Apache HttpClient、HttpComponents、OkHttp 和 Jodd 等现有实现的能力一致；不要只修复其中一种而遗漏其他可选实现。\n- 涉及 Starter 或插件时，检查单账号与多账号版本以及自动配置、配置属性和示例测试是否需要同步。\n- 公共方法需要清晰的 Javadoc，至少准确描述参数、返回值、异常和必要约束；不要编写与实现不一致的模板化注释。\n- 不吞掉异常，不使用空 `catch`，不在日志中泄露 token、secret、密钥、签名原文或用户敏感数据。\n\n## 测试与验证\n\n- 项目测试主要使用 TestNG；沿用目标模块已有测试基类、数据提供器、Mock 方式和资源布局。\n- 修复 bug 时应添加能够复现旧行为并验证修复结果的回归测试；新增公共方法必须配套单元测试。\n- 优先执行受影响模块及其依赖的测试：\n\n```shell\nmvn -pl <module> -am test\n```\n\n- 运行单个测试类时，可在对应模块范围内执行：\n\n```shell\nmvn -pl <module> -am -Dtest=<TestClass> -Dsurefire.failIfNoSpecifiedTests=false test\n```\n\n- 跨公共模块、父 POM、BOM 或多个产品模块的变更应扩大验证范围；条件允许时执行：\n\n```shell\nmvn test\n```\n\n- 对仅需确认编译且测试依赖外部凭据的场景，可执行模块级编译或打包，但不得把跳过测试的构建描述为“测试通过”。\n- 部分测试可能依赖微信凭据、网络或本地配置。不得提交真实凭据；无法运行时应说明原因以及已完成的替代验证。\n- 完成前至少运行 `git diff --check`，并人工检查 `git diff`，确认没有意外文件、调试代码、生成物或敏感信息。\n\n## 文档与依赖变更\n\n- 用户可见的 API、配置项、模块使用方式或兼容性发生变化时，同步更新相关 Javadoc、README 或 `docs` 文档。\n- 示例中的版本号、模块名和配置键应与当前项目保持一致；不要复制未经验证的外部示例。\n- 修改根 POM、父 POM 或 `wx-java-bom` 时，检查所有子模块和对外依赖管理的影响。\n- 不提交构建输出、IDE 临时文件、测试报告、真实配置文件或本地备份文件。\n\n## Git 与 Pull Request 规范\n\n- 贡献目标分支为 `develop`；`release` 用于正式版本发布，不应作为常规 Pull Request 的目标分支。\n- 提交前保持工作区变更聚焦，不覆盖或回退用户已有的无关修改。\n- Commit 和 Pull Request 应说明变更动机、影响模块、兼容性风险和验证方式；关联已有 Issue 时写明编号。\n- 不得在未经用户明确授权的情况下执行 `git push`、创建或合并 Pull Request、改写历史或执行破坏性 Git 操作。\n- 不要使用 `git reset --hard`、强制 checkout 等方式清理不属于当前任务的改动。\n\n## 安全与敏感数据\n\n- 禁止提交 AppID 对应的 secret、access token、API v3 密钥、商户私钥、证书私钥、用户数据或其他真实凭据。\n- 测试和文档使用明显的占位值或脱敏数据；日志应避免输出查询串、请求体或响应体中的敏感字段。\n- 涉及签名、验签、加解密、证书、回调通知和支付金额时，重点检查字符编码、字段排序、精度、时区、重放风险和资源关闭。\n- 涉及网络请求、文件或流时，检查超时、异常路径、资源释放、响应关闭和大数据量下的内存行为。\n\n## Review 指南\n\n- 重点检查空指针、并发、资源释放、兼容性问题。\n- 不要只做代码风格建议，优先指出真实 bug 和回归风险。\n- 所有 Pull Request Review 的总结、结论和行内评论必须使用简体中文。\n- 技术标识符、类名、方法名、变量名、日志、错误信息及代码片段保持原文，不要翻译。\n- 严重程度标识可以保留 `P0`、`P1`、`P2` 等英文缩写。\n- 如果没有发现需要阻止合并的问题，也必须使用简体中文给出结论。\n- Review 结论必须基于当前 diff 和仓库中可验证的行为；不确定时明确说明假设，不要把推测写成确定缺陷。\n- 仅报告由本次变更引入或暴露、且作者可以采取行动的问题，并指出具体文件、位置、触发条件和影响。\n- 重点关注微信接口契约、Java 8 兼容性、公共 API 兼容性、序列化字段、HTTP 客户端实现一致性、Starter 多账号场景及敏感信息泄露。\n- 不要仅因缺少全仓库测试、个人风格偏好或与本次变更无关的历史代码而阻止合并。\n\n## Agent 完成检查清单\n\n- 已确认并遵循相关模块、相邻代码和更具体的 `AGENTS.md`。\n- 变更范围与任务直接相关，没有覆盖用户的无关修改。\n- 新增代码保持 Java 8、公共 API 和序列化兼容性。\n- 必要的测试与文档已经更新。\n- 已执行与风险匹配的构建或测试，并如实记录结果。\n- 已检查完整 diff、格式、生成物和敏感信息。\n- 最终回复使用简体中文，简要列出修改内容、验证结果和任何剩余风险。\n","category":"root","tokens":1053},{"name":"copilot-instructions.md","path":".github/copilot-instructions.md","title":"copilot-instructions.md","content":"# Copilot Instruction\n请始终使用中文生成 Pull Request 的标题、描述和提交信息\n\n\n# WxJava - 微信 Java SDK 开发说明\n\nWxJava 是一个支持多种微信平台的完整 Java SDK，包含公众号、小程序、微信支付、企业微信、开放平台、视频号、企点等多种功能模块。\n\n**请始终优先参考本说明，只有在遇到与此内容不一致的意外信息时，才退而使用搜索或 bash 命令。**\n\n## 高效开发指南\n\n### 前置条件与环境准备\n- **Java 要求**：JDK 8+（项目最低目标为 Java 8）\n- **Maven**：推荐 Maven 3.6+（已验证 Maven 3.9.11）\n- **IDE**：推荐使用 IntelliJ IDEA（项目针对 IDEA 优化）\n\n### 引导、构建与校验\n克隆仓库后按顺序执行以下命令：\n\n```bash\n# 1. 基础编译（请勿中断 - 约需 4-5 分钟）\nmvn clean compile -DskipTests=true --no-transfer-progress\n# 超时时间：建议设置 8 分钟以上。实际时间：约 4 分钟\n\n# 2. 完整打包（请勿中断 - 约需 2-3 分钟）  \nmvn clean package -DskipTests=true --no-transfer-progress\n# 超时时间：建议设置 5 分钟以上。实际时间：约 2 分钟\n\n# 3. 代码质量校验（请勿中断 - 约需 45-60 秒）\nmvn checkstyle:check --no-transfer-progress\n# 超时时间：建议设置 3 分钟以上。实际时间：约 50 秒\n```\n\n重要时间说明：\n- 绝对不要中断任意 Maven 构建命令\n- 编译阶段耗时最长（约 4 分钟），原因是项目包含 34 个模块\n- 后续构建会更快，因为存在增量编译\n- 始终使用 `--no-transfer-progress` 以减少日志噪音\n\n### 测试结构\n- **测试框架**：TestNG（非 JUnit）\n- **测试文件**：共有 298 个测试文件\n- **默认行为**：pom.xml 中默认禁用测试（`<skip>true</skip>`）\n- **测试配置**：测试需要通过 test-config.xml 提供真实的微信 API 凭据\n- **注意**：没有真实微信 API 凭据请不要尝试运行测试，测试将会失败\n\n## 项目结构与导航\n\n### 核心 SDK 模块（主要开发区）\n- `weixin-java-common/` - 通用工具与基础类（最重要）\n- `weixin-java-mp/` - 公众号 SDK\n- `weixin-java-pay/` - 微信支付 SDK\n- `weixin-java-miniapp/` - 小程序 SDK\n- `weixin-java-cp/` - 企业微信 SDK\n- `weixin-java-open/` - 开放平台 SDK\n- `weixin-java-channel/` - 视频号 / Channel SDK\n- `weixin-java-qidian/` - 企点 SDK\n\n### 框架集成模块\n- `spring-boot-starters/` - Spring Boot 自动配置 starter\n- `solon-plugins/` - Solon 框架插件\n- `weixin-graal/` - GraalVM 本地镜像支持\n\n### 配置与质量控制\n- `quality-checks/google_checks.xml` - Checkstyle 配置\n- `.editorconfig` - 代码格式规则（2 个空格等于 1 个制表）\n- `pom.xml` - 根级 Maven 配置\n\n## 开发工作流\n\n### 修改代码的流程\n1. 修改前务必先构建以建立干净基线：\n   ```bash\n   mvn clean compile --no-transfer-progress\n   ```\n\n2. 遵循代码风格（由 checkstyle 强制）：\n   - 缩进使用 2 个空格（不要用制表符）\n   - 遵循 Google Java 风格指南\n   - 在 IDE 中安装 EditorConfig 插件\n\n3. 增量验证修改：\n   ```bash\n   # 每次修改后运行：\n   mvn compile --no-transfer-progress\n   mvn checkstyle:check --no-transfer-progress\n   ```\n\n### 提交修改前的必须校验\n请务必按顺序完成以下校验步骤：\n\n1. 代码风格校验：\n   ```bash\n   mvn checkstyle:check --no-transfer-progress\n   # 必须通过 - 约需 50 秒\n   ```\n\n2. 完整清理构建：\n   ```bash\n   mvn clean package -DskipTests=true --no-transfer-progress  \n   # 必须成功 - 约需 2 分钟\n   ```\n\n3. 文档：为公共方法和类补充或更新 javadoc\n4. 贡献规范：遵循 `CONTRIBUTING.md`，Pull Request 必须以 `develop` 分支为目标\n\n## 模块依赖与构建顺序\n\n### 核心模块依赖（构建顺序）\n1. `weixin-graal`（GraalVM 支持）\n2. `weixin-java-common`（所有模块的基础）\n3. 核心 SDK 模块（mp、pay、miniapp、cp、open、channel、qidian）\n4. 框架集成（spring-boot-starters、solon-plugins）\n\n### 主要关系模式\n- 所有 SDK 模块都依赖于 `weixin-java-common`\n- Spring Boot starters 依赖对应的 SDK 模块\n- Solon 插件遵循与 Spring Boot starters 相同的依赖模式\n- 每个模块都有单账号与多账号配置支持\n\n## 常见任务与命令\n\n### 验证指定模块\n```bash\n# 构建单个模块（将 'weixin-java-mp' 替换为目标模块）：\ncd weixin-java-mp\nmvn clean compile --no-transfer-progress\n```\n\n### 检查依赖\n```bash\n# 分析依赖树：\nmvn dependency:tree --no-transfer-progress\n\n# 检查依赖更新：  \n./others/check-dependency-updates.sh\n```\n\n### 发布与发布准备\n```bash\n# 版本检查：\nmvn versions:display-property-updates --no-transfer-progress\n\n# 部署（需要凭据）：\nmvn clean deploy -P release --no-transfer-progress\n```\n\n## 重要文件与位置\n\n### 配置文件\n- `pom.xml` - 根级 Maven 配置与依赖管理\n- `quality-checks/google_checks.xml` - Checkstyle 规则\n- `.editorconfig` - IDE 格式化配置\n- `.github/workflows/maven-publish.yml` - CI/CD 工作流\n\n### 文档\n- `README.md` - 项目概览与使用说明（中文）\n- `CONTRIBUTING.md` - 贡献指南\n- `demo.md` - 示例项目与演示链接\n- 每个模块均有单独的文档与示例\n\n### 测试资源\n- `*/src/test/resources/test-config.sample.xml` - 测试配置模板\n- 测试运行需要真实的微信 API 凭据\n\n## SDK 使用模式\n\n### Maven 依赖示例\n```xml\n<dependency>\n  <groupId>com.github.binarywang</groupId>\n  <artifactId>weixin-java-mp</artifactId>  <!-- 或其他模块 -->\n  <version>4.7.0</version>\n</dependency>\n```\n\n### 常见开发区域\n- **API 客户端实现**：位于 `*/service/impl/` 目录\n- **模型类**：位于 `*/bean/` 目录\n- **配置**：位于 `*/config/` 目录\n- **工具类**：位于 `weixin-java-common` 的 `*/util/` 目录\n\n## 故障排查\n\n### 构建问题\n- **OutOfMemoryError**：增加 Maven 内存：`export MAVEN_OPTS=\"-Xmx2g\"`\n- **编译失败**：通常为依赖问题 - 先执行 `mvn clean`\n- **Checkstyle 失败**：检查 IDE 的 `.editorconfig` 设置\n\n### 常见陷阱\n- **测试默认跳过**：这是正常现象 — 测试需要微信 API 凭据\n- **多模块变更**：总是在仓库根目录构建，而不是单独模块\n- **分支目标**：Pull Request 必须以 `develop` 分支为目标，而不是 `master` 或 `release`\n\n## 性能说明\n- **首次构建**：由于依赖下载，耗时 4-5 分钟\n- **增量构建**：通常更快（约 30-60 秒）\n- **Checkstyle**：运行迅速（约 50 秒），应当经常运行\n- **IDE 性能**：项目使用 Lombok，请确保启用注解处理\n\n注意：本项目为 SDK 库项目，而非可运行应用。修改应以 API 功能为主，不要改动应用级行为。\n","category":".github","tokens":1078}]}