Skip to content

Commit 39fb7cc

Browse files
authored
Merge branch 'binarywang:develop' into develop
2 parents db572c6 + d26172e commit 39fb7cc

809 files changed

Lines changed: 28876 additions & 4385 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/agents/my-agent.agent.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
# Fill in the fields below to create a basic custom agent for your repository.
3+
# The Copilot CLI can be used for local testing: https://gh.io/customagents/cli
4+
# To make this agent available, merge this file into the default repository branch.
5+
# For format details, see: https://gh.io/customagents/config
6+
7+
name: 全部用中文
8+
description: 需要用中文,包括PR标题和分析总结过程
9+
---
10+
11+
# My Agent
12+
13+
请使用中文输出思考过程和总结,包括PR标题,提交commit信息也要使用中文

.github/copilot-instructions.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
# Copilot Instruction
2+
请始终使用中文生成 Pull Request 的标题、描述和提交信息
3+
4+
5+
# WxJava - 微信 Java SDK 开发说明
6+
7+
WxJava 是一个支持多种微信平台的完整 Java SDK,包含公众号、小程序、微信支付、企业微信、开放平台、视频号、企点等多种功能模块。
8+
9+
**请始终优先参考本说明,只有在遇到与此内容不一致的意外信息时,才退而使用搜索或 bash 命令。**
10+
11+
## 高效开发指南
12+
13+
### 前置条件与环境准备
14+
- **Java 要求**:JDK 8+(项目最低目标为 Java 8)
15+
- **Maven**:推荐 Maven 3.6+(已验证 Maven 3.9.11)
16+
- **IDE**:推荐使用 IntelliJ IDEA(项目针对 IDEA 优化)
17+
18+
### 引导、构建与校验
19+
克隆仓库后按顺序执行以下命令:
20+
21+
```bash
22+
# 1. 基础编译(请勿中断 - 约需 4-5 分钟)
23+
mvn clean compile -DskipTests=true --no-transfer-progress
24+
# 超时时间:建议设置 8 分钟以上。实际时间:约 4 分钟
25+
26+
# 2. 完整打包(请勿中断 - 约需 2-3 分钟)
27+
mvn clean package -DskipTests=true --no-transfer-progress
28+
# 超时时间:建议设置 5 分钟以上。实际时间:约 2 分钟
29+
30+
# 3. 代码质量校验(请勿中断 - 约需 45-60 秒)
31+
mvn checkstyle:check --no-transfer-progress
32+
# 超时时间:建议设置 3 分钟以上。实际时间:约 50 秒
33+
```
34+
35+
重要时间说明:
36+
- 绝对不要中断任意 Maven 构建命令
37+
- 编译阶段耗时最长(约 4 分钟),原因是项目包含 34 个模块
38+
- 后续构建会更快,因为存在增量编译
39+
- 始终使用 `--no-transfer-progress` 以减少日志噪音
40+
41+
### 测试结构
42+
- **测试框架**:TestNG(非 JUnit)
43+
- **测试文件**:共有 298 个测试文件
44+
- **默认行为**:pom.xml 中默认禁用测试(`<skip>true</skip>`
45+
- **测试配置**:测试需要通过 test-config.xml 提供真实的微信 API 凭据
46+
- **注意**:没有真实微信 API 凭据请不要尝试运行测试,测试将会失败
47+
48+
## 项目结构与导航
49+
50+
### 核心 SDK 模块(主要开发区)
51+
- `weixin-java-common/` - 通用工具与基础类(最重要)
52+
- `weixin-java-mp/` - 公众号 SDK
53+
- `weixin-java-pay/` - 微信支付 SDK
54+
- `weixin-java-miniapp/` - 小程序 SDK
55+
- `weixin-java-cp/` - 企业微信 SDK
56+
- `weixin-java-open/` - 开放平台 SDK
57+
- `weixin-java-channel/` - 视频号 / Channel SDK
58+
- `weixin-java-qidian/` - 企点 SDK
59+
60+
### 框架集成模块
61+
- `spring-boot-starters/` - Spring Boot 自动配置 starter
62+
- `solon-plugins/` - Solon 框架插件
63+
- `weixin-graal/` - GraalVM 本地镜像支持
64+
65+
### 配置与质量控制
66+
- `quality-checks/google_checks.xml` - Checkstyle 配置
67+
- `.editorconfig` - 代码格式规则(2 个空格等于 1 个制表)
68+
- `pom.xml` - 根级 Maven 配置
69+
70+
## 开发工作流
71+
72+
### 修改代码的流程
73+
1. 修改前务必先构建以建立干净基线:
74+
```bash
75+
mvn clean compile --no-transfer-progress
76+
```
77+
78+
2. 遵循代码风格(由 checkstyle 强制):
79+
- 缩进使用 2 个空格(不要用制表符)
80+
- 遵循 Google Java 风格指南
81+
- 在 IDE 中安装 EditorConfig 插件
82+
83+
3. 增量验证修改:
84+
```bash
85+
# 每次修改后运行:
86+
mvn compile --no-transfer-progress
87+
mvn checkstyle:check --no-transfer-progress
88+
```
89+
90+
### 提交修改前的必须校验
91+
请务必按顺序完成以下校验步骤:
92+
93+
1. 代码风格校验:
94+
```bash
95+
mvn checkstyle:check --no-transfer-progress
96+
# 必须通过 - 约需 50 秒
97+
```
98+
99+
2. 完整清理构建:
100+
```bash
101+
mvn clean package -DskipTests=true --no-transfer-progress
102+
# 必须成功 - 约需 2 分钟
103+
```
104+
105+
3. 文档:为公共方法和类补充或更新 javadoc
106+
4. 贡献规范:遵循 `CONTRIBUTING.md`,Pull Request 必须以 `develop` 分支为目标
107+
108+
## 模块依赖与构建顺序
109+
110+
### 核心模块依赖(构建顺序)
111+
1. `weixin-graal`(GraalVM 支持)
112+
2. `weixin-java-common`(所有模块的基础)
113+
3. 核心 SDK 模块(mp、pay、miniapp、cp、open、channel、qidian)
114+
4. 框架集成(spring-boot-starters、solon-plugins)
115+
116+
### 主要关系模式
117+
- 所有 SDK 模块都依赖于 `weixin-java-common`
118+
- Spring Boot starters 依赖对应的 SDK 模块
119+
- Solon 插件遵循与 Spring Boot starters 相同的依赖模式
120+
- 每个模块都有单账号与多账号配置支持
121+
122+
## 常见任务与命令
123+
124+
### 验证指定模块
125+
```bash
126+
# 构建单个模块(将 'weixin-java-mp' 替换为目标模块):
127+
cd weixin-java-mp
128+
mvn clean compile --no-transfer-progress
129+
```
130+
131+
### 检查依赖
132+
```bash
133+
# 分析依赖树:
134+
mvn dependency:tree --no-transfer-progress
135+
136+
# 检查依赖更新:
137+
./others/check-dependency-updates.sh
138+
```
139+
140+
### 发布与发布准备
141+
```bash
142+
# 版本检查:
143+
mvn versions:display-property-updates --no-transfer-progress
144+
145+
# 部署(需要凭据):
146+
mvn clean deploy -P release --no-transfer-progress
147+
```
148+
149+
## 重要文件与位置
150+
151+
### 配置文件
152+
- `pom.xml` - 根级 Maven 配置与依赖管理
153+
- `quality-checks/google_checks.xml` - Checkstyle 规则
154+
- `.editorconfig` - IDE 格式化配置
155+
- `.github/workflows/maven-publish.yml` - CI/CD 工作流
156+
157+
### 文档
158+
- `README.md` - 项目概览与使用说明(中文)
159+
- `CONTRIBUTING.md` - 贡献指南
160+
- `demo.md` - 示例项目与演示链接
161+
- 每个模块均有单独的文档与示例
162+
163+
### 测试资源
164+
- `*/src/test/resources/test-config.sample.xml` - 测试配置模板
165+
- 测试运行需要真实的微信 API 凭据
166+
167+
## SDK 使用模式
168+
169+
### Maven 依赖示例
170+
```xml
171+
<dependency>
172+
<groupId>com.github.binarywang</groupId>
173+
<artifactId>weixin-java-mp</artifactId> <!-- 或其他模块 -->
174+
<version>4.7.0</version>
175+
</dependency>
176+
```
177+
178+
### 常见开发区域
179+
- **API 客户端实现**:位于 `*/service/impl/` 目录
180+
- **模型类**:位于 `*/bean/` 目录
181+
- **配置**:位于 `*/config/` 目录
182+
- **工具类**:位于 `weixin-java-common``*/util/` 目录
183+
184+
## 故障排查
185+
186+
### 构建问题
187+
- **OutOfMemoryError**:增加 Maven 内存:`export MAVEN_OPTS="-Xmx2g"`
188+
- **编译失败**:通常为依赖问题 - 先执行 `mvn clean`
189+
- **Checkstyle 失败**:检查 IDE 的 `.editorconfig` 设置
190+
191+
### 常见陷阱
192+
- **测试默认跳过**:这是正常现象 — 测试需要微信 API 凭据
193+
- **多模块变更**:总是在仓库根目录构建,而不是单独模块
194+
- **分支目标**:Pull Request 必须以 `develop` 分支为目标,而不是 `master``release`
195+
196+
## 性能说明
197+
- **首次构建**:由于依赖下载,耗时 4-5 分钟
198+
- **增量构建**:通常更快(约 30-60 秒)
199+
- **Checkstyle**:运行迅速(约 50 秒),应当经常运行
200+
- **IDE 性能**:项目使用 Lombok,请确保启用注解处理
201+
202+
注意:本项目为 SDK 库项目,而非可运行应用。修改应以 API 功能为主,不要改动应用级行为。

.github/workflows

Lines changed: 0 additions & 4 deletions
This file was deleted.
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
name: Publish to Maven Central
2+
on:
3+
push:
4+
branches:
5+
- develop
6+
7+
permissions:
8+
contents: write
9+
10+
concurrency:
11+
group: maven-publish-${{ github.ref }}
12+
cancel-in-progress: true
13+
14+
jobs:
15+
build-and-publish:
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- name: Checkout Code
20+
uses: actions/checkout@v4
21+
with:
22+
fetch-depth: 0
23+
24+
- name: Detect and tag release version from commit message
25+
id: version_detect
26+
run: |
27+
COMMIT_MSG=$(git log -1 --pretty=%B)
28+
VERSION=""
29+
TAG=""
30+
IS_RELEASE="false"
31+
if [[ "$COMMIT_MSG" =~ ^:bookmark:\ 发布\ ([0-9]+\.[0-9]+\.[0-9]+)\.B\ 测试版本 ]]; then
32+
BASE_VER="${BASH_REMATCH[1]}"
33+
VERSION="${BASE_VER}.B"
34+
TAG="v${BASE_VER}"
35+
IS_RELEASE="true"
36+
echo "Matched release commit: VERSION=$VERSION, TAG=$TAG"
37+
# 检查并打tag
38+
if git tag | grep -q "^$TAG$"; then
39+
echo "Tag $TAG already exists."
40+
else
41+
git config user.name "Binary Wang"
42+
git config user.email "a@binarywang.com"
43+
git tag -a "$TAG" -m "Release $TAG"
44+
git push origin "$TAG"
45+
echo "Tag $TAG created and pushed."
46+
fi
47+
fi
48+
echo "is_release=$IS_RELEASE" >> $GITHUB_OUTPUT
49+
echo "version=$VERSION" >> $GITHUB_OUTPUT
50+
51+
- name: Set up Java
52+
uses: actions/setup-java@v4
53+
with:
54+
java-version: '8'
55+
distribution: 'temurin'
56+
server-id: central
57+
server-username: MAVEN_USERNAME
58+
server-password: MAVEN_PASSWORD
59+
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
60+
gpg-passphrase: MAVEN_GPG_PASSPHRASE
61+
cache: maven
62+
63+
- name: Verify GPG keys
64+
run: |
65+
echo "Available GPG Keys:"
66+
gpg --list-secret-keys --keyid-format LONG
67+
68+
- name: Generate and set version
69+
id: set_version
70+
run: |
71+
if [[ "${{ steps.version_detect.outputs.is_release }}" == "true" ]]; then
72+
VERSION="${{ steps.version_detect.outputs.version }}"
73+
else
74+
git describe --tags 2>/dev/null || echo "no tag"
75+
TIMESTAMP=$(date +'%Y%m%d.%H%M%S')
76+
GIT_DESCRIBE=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//' || echo "0.0.1")
77+
VERSION="${GIT_DESCRIBE}-${TIMESTAMP}"
78+
fi
79+
echo "Final version: $VERSION"
80+
echo "VERSION=$VERSION" >> $GITHUB_ENV
81+
mvn versions:set -DnewVersion=$VERSION --no-transfer-progress
82+
env:
83+
TZ: Asia/Shanghai
84+
85+
- name: Publish to Maven Central
86+
run: |
87+
mvn clean deploy -P release \
88+
-Dmaven.test.skip=true \
89+
-Dgpg.args="--batch --yes --pinentry-mode loopback" \
90+
--no-transfer-progress
91+
env:
92+
MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
93+
MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
94+
MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}

0 commit comments

Comments
 (0)