项目构建
本页详细说明 DaxPay 每个应用的编译、构建产物与启动方式。按后端应用、前端应用两条线组织,每个应用独立成节,包含环境要求、构建命令、产物路径与启动验证。
首次试用
只想快速跑起来体验功能,建议直接走 Docker Compose,无需本地编译。本页面向需要二次开发或定制部署的场景。
📷 [配图]:整体编译流程图 —— 展示从源码到可运行产物的全链路(后端 jar / 前端 dist / 小程序包),标注各应用之间的依赖关系与启动顺序
环境准备
各应用共同依赖与各自专属依赖汇总如下,按需安装。
| 环境 | 版本要求 | 适用应用 | 说明 |
|---|---|---|---|
| JDK | 25+ | 所有 Java 后端 | Java 运行环境(容器化部署可不装,镜像自带) |
| mvnd | 最新 | 所有 Java 后端 | Maven Daemon,加速编译 |
| Go | 1.26+ | dax-pay-channel-one-go | Go 通道子应用 |
| Node.js | ^22.13.0 || ^24.0.0 | 所有前端 + 文档站 | 前端构建环境 |
| pnpm | >=10.0.0 | 所有前端 + 文档站 | 包管理器(强制,preinstall 会拦截 npm/yarn) |
| PostgreSQL | 14+ | 后端运行依赖 | 主数据库(编译不需要,运行需要) |
| Redis | 7+ | 后端运行依赖 | 分布式缓存 |
| Apache Artemis | 最新 | 后端运行依赖 | JMS 消息队列,支付延时通知 |
Spring Boot 4.1 编译注意
-DskipTests不再跳过测试的 AOT 处理,必须改用-Dmaven.test.skip=true- PowerShell 下含
=的-D参数必须加引号(如"-Dmaven.test.skip=true"),否则会被空格拆分
数据库准备
数据库需提前创建(UTF8 编码,public 模式)。各应用使用的库:
| 应用 | dev 库名 | prod 库名 |
|---|---|---|
| 主应用 dax-pay-open | daxpay-dev | daxpay-prod |
| 通道子应用(channel-one / channel-two) | 与主应用同库 daxpay-dev | 与主应用同库 daxpay-prod |
同库说明
通道子应用与主应用共享同一数据库,无需单独建库。详细连接配置见 配置说明。
后端应用构建
主应用 dax-pay-open
支付核心后端,承载支付业务、通道路由编排、风控与系统管理。
技术栈:Java 25 · Spring Boot 4.1.0 · PostgreSQL · Redis · Apache Artemis · MyBatis-Plus · Sa-Token · MapStruct
端口:9999
编译
cd dax-pay-open
# 完整打包(产出可运行 jar)
mvnd clean package "-Dmaven.test.skip=true" -T 4禁止使用 install
mvnd install 会触发全量打包并写入本地 Maven 仓库,输出庞大、耗时长,且经 PowerShell 管道易阻塞卡死。日常构建验证只使用 compile,生产打包使用 package。
单模块快速编译(只验证改动涉及的模块,比全量快很多):
cd dax-pay-open
# -pl 指定模块路径,-am 同时编译其依赖模块
mvnd compile -pl daxpay-payment/daxpay-payment-core -am "-Dmaven.test.skip=true"产物路径:dax-pay-open/daxpay-start/target/daxpay-union.jar
启动
# 开发模式(端口 9999)
cd dax-pay-open/daxpay-start
mvnd spring-boot:run -Dspring-boot.run.profiles=dev
# 生产模式(通过 jar 启动)
java -jar daxpay-start/target/daxpay-union.jar --spring.profiles.active=prod生产环境凭证通过环境变量注入,详见 配置说明 - 生产环境变量清单。
验证
curl http://127.0.0.1:9999/actuator/health
# 预期 {"status":"UP"}启动成功后控制台输出 应用 'dax-pay-open' 运行成功!,dev 环境 API 文档:http://127.0.0.1:9999/swagger-ui/index.html
📷 [配图]:主应用模块结构 —— 展示 daxpay-platform / daxpay-payment / daxpay-channel / daxpay-plugin / daxpay-demo / daxpay-start 六大模块的职责与依赖关系
通道子应用 dax-pay-channel-one
对接支付宝、微信、抖音、银联商务等直连通道的独立部署微服务,承载第三方 SDK 的直接调用。
技术栈:Java 25 · Spring Boot 4.1.0 · 各通道官方 SDK(alipay-sdk / weixin-java-pay / douyinpay / UMS 自研 HTTP)
端口:20100
编译
cd dax-pay-channel-one
mvnd clean package "-Dmaven.test.skip=true" -T 4产物路径:dax-pay-channel-one/daxpay-channel-start/target/daxpay-channel-one.jar
启动
# 开发模式(端口 20100)
cd dax-pay-channel-one/daxpay-channel-start
mvnd spring-boot:run -Dspring-boot.run.profiles=dev
# 生产模式
java -jar daxpay-channel-start/target/daxpay-channel-one.jar --spring.profiles.active=prod验证
curl http://127.0.0.1:20100/actuator/health
# 预期 {"status":"UP"}与主应用的关系
主应用通过 @HttpExchange 声明式客户端调用本子应用,链路 AES-GCM 加密。需先启动主应用或确保主应用可达。
通道子应用 dax-pay-channel-two
对接聚合通道(拉卡拉、海科融通、斗拱、乐刷、富友等)的独立部署微服务,架构与 channel-one 完全相同,区别在于承载的通道集合。
技术栈:Java 25 · Spring Boot 4.1.0 · 各聚合通道 SDK
端口:20200
编译
cd dax-pay-channel-two
mvnd clean package "-Dmaven.test.skip=true" -T 4产物路径:dax-pay-channel-two/daxpay-channel-start/target/daxpay-channel-two.jar
启动
# 开发模式(端口 20200)
cd dax-pay-channel-two/daxpay-channel-start
mvnd spring-boot:run -Dspring-boot.run.profiles=dev
# 生产模式
java -jar daxpay-channel-start/target/daxpay-channel-two.jar --spring.profiles.active=prod验证
curl http://127.0.0.1:20200/actuator/health
# 预期 {"status":"UP"}启用 channel-two
主应用默认路由配置中 channel-two 为注释状态,如需启用需在 application.yml 的 daxpay.channel.two.base-url 取消注释,详见 配置说明 - 通道子应用路由。
通道子应用 dax-pay-channel-one-go(Go 版)
与 Java 版 channel-one 完全对等的 Go 实现,端口、路由、响应契约一致,作为通道对接层的另一种语言选择。
技术栈:Go 1.26 · Gin · OpenTelemetry(进程内)· 嵌入式 i18n(10 语种)
端口:20100(与 Java 版相同)
勿与 Java 版同时启动
Go 版与 Java 版端口、路由完全重叠,同时启动会冲突。部署时二选一。
编译
cd dax-pay-channel-one-go
# 编译二进制
go build -o daxpay-channel-one-go ./cmd/server/启动
# 方式一:直接运行二进制
./daxpay-channel-one-go
# 方式二:go run(开发期)
go run ./cmd/server/配置加载:默认读取 configs/config.yaml,可通过环境变量 DAXPAY_CONFIG 指定其他路径。
验证
curl http://127.0.0.1:20100/actuator/health
# 预期 {"status":"UP"}📷 [配图]:Go 版与 Java 版对照 —— 展示两者端口、路由、响应契约的对等关系,以及选型建议(高吞吐低内存 vs 生态完整)
前端应用构建
前置要求
所有前端应用均要求 Node.js ^22.13.0 || ^24.0.0、pnpm >=10.0.0。首次构建前在各应用目录执行 pnpm install。
Web 管理端 dax-pay-ui
基于 Vue Vben Admin 5 的 monorepo,同源编译出运营端与商户端两个独立应用,共用 packages/ 框架包与 i18n 架构。
技术栈:Vue 3.5 · Vite 8 · TypeScript · antdv-next · vxe-table 4 · TailwindCSS 4 · vue-i18n · pnpm + Turbo
子应用:
| 子应用 | 定位 | dev 端口 | VITE_APP_CLIENT_CODE |
|---|---|---|---|
apps/daxpay-admin | 运营(管理)端 | 6999 | admin |
apps/daxpay-merchant | 商户端 | 7999 | merchant |
安装与开发
cd dax-pay-ui
pnpm install
# 运营端开发(端口 6999)
pnpm run dev:admin
# 商户端开发(端口 7999)
pnpm run dev:merchant构建
cd dax-pay-ui
# 构建全部应用(turbo 并行)
pnpm run build
# 单独构建运营端
pnpm -F daxpay-admin run build
# 单独构建商户端
pnpm -F daxpay-merchant run build产物路径:
| 子应用 | 产物 |
|---|---|
| 运营端 | dax-pay-ui/apps/daxpay-admin/dist/ |
| 商户端 | dax-pay-ui/apps/daxpay-merchant/dist/ |
类型检查与代码规范
pnpm run check:type # turbo run typecheck (vue-tsc)
pnpm run lint # ESLint📷 [配图]:Web 管理端 monorepo 结构 —— 展示 apps/daxpay-admin 与 apps/daxpay-merchant 共用 packages/ 框架包,通过 client_code 实现端级隔离
移动 H5 端 dax-pay-h5
单应用同时承载 PC 与移动两套完全独立的页面,由入口设备探测分发;移动端使用 postcss-mobile-forever 做 vw 适配。
技术栈:Vue 3.5 · Vite 8 · Vue Router · Vant 4(移动端)· UnoCSS · Pinia · vue-i18n
端口(dev):9500
安装与开发
cd dax-pay-h5
pnpm install
# 开发(端口 9500,支持 ?device=pc|mobile 强制切换设备视图)
pnpm run dev构建
cd dax-pay-h5
pnpm run build产物路径:dax-pay-h5/dist/vant-mobile/(注意产物目录为 vant-mobile,非默认 dist/)
PC 与移动端
H5 端单一产物同时包含 PC 与移动页面,由运行时设备探测分发,无需分别构建。开发期可用 ?device=pc|mobile 查询参数强制指定。
小程序管理端 dax-pay-app-admin
面向平台运营方的管理类小程序(unibest 4 + uni-app + Vue 3),一次开发多端编译。UI 使用 @wot-ui/ui(wot-ui v2),列表用 z-paging。
技术栈:uni-app · Vue 3.4 · @wot-ui/ui v2 · z-paging · UnoCSS · vue-i18n
编译目标:H5 / 微信小程序 / 支付宝小程序 / 抖音小程序 / App(Android / iOS)
端口(H5 dev):9000
安装与开发
cd dax-pay-app-admin
pnpm install| 用途 | 命令 | 说明 |
|---|---|---|
| H5 开发 | pnpm run dev | 端口 9000 |
| 微信小程序开发 | pnpm run dev:mp | 需微信开发者工具 |
| 支付宝小程序开发 | pnpm run dev:mp-alipay | 需支付宝小程序 IDE |
| 抖音小程序开发 | pnpm run dev:mp-toutiao | 需抖音开发者工具 |
| App 开发 | pnpm run dev:app | uni-app CLI |
构建
| 编译目标 | 命令 |
|---|---|
| H5 | pnpm run build:h5 |
| 微信小程序 | pnpm run build:mp-weixin |
| 支付宝小程序 | pnpm run build:mp-alipay |
| 抖音小程序 | pnpm run build:mp-toutiao |
| App | pnpm run build:app |
产物路径:dax-pay-app-admin/dist/build/<平台>/(如 dist/build/h5/、dist/build/mp-weixin/)
微信小程序上传
构建后可通过 pnpm run upload:mp 调用 miniprogram-ci 自动上传微信小程序(需配置上传密钥)。
收银小程序 dax-pay-cashier
面向最终消费者的收银类小程序,技术栈与 dax-pay-app-admin 一致,但定位极简收银,无 H5 / App 编译目标。
技术栈:uni-app · Vue 3.4 · @wot-ui/ui v2 · vue-i18n
编译目标:微信小程序 / 支付宝小程序 / 抖音小程序(无 H5 / App)
安装与开发
cd dax-pay-cashier
pnpm install| 用途 | 命令 | 说明 |
|---|---|---|
| 微信小程序开发 | pnpm run dev | 默认即微信小程序 |
| 支付宝小程序开发 | pnpm run dev:mp-alipay | 需支付宝小程序 IDE |
| 抖音小程序开发 | pnpm run dev:mp-toutiao | 需抖音开发者工具 |
构建
| 编译目标 | 命令 |
|---|---|
| 微信小程序 | pnpm run build(默认) |
| 支付宝小程序 | pnpm run build:mp-alipay |
| 抖音小程序 | pnpm run build:mp-toutiao |
产物路径:dax-pay-cashier/dist/build/<平台>/(如 dist/build/mp-weixin/)
商户端小程序 dax-pay-app-merchant(规划中)
🚧 规划中:
dax-pay-app-merchant(商户端管理小程序)尚未实现。计划参照dax-pay-app-admin的工程结构与页面骨架,技术栈一致(unibest 4 + wot-ui v2),面向商户自助管理。待开发完成后补充本节。
文档站 dax-pay-doc
本站,基于 VitePress 2.0 构建,中英双语,支持 mermaid 图表与 markmap 思维导图。
技术栈:VitePress 2.0 · Vue 3.5 · mermaid 11 · medium-zoom · 阅读增强插件
端口(dev):5173(VitePress 默认)
安装与开发
cd dax-pay-doc
pnpm install
pnpm run dev构建
cd dax-pay-doc
pnpm run build # 构建并生成 llms.txt / llms-full.txt
pnpm run preview # 本地预览构建产物产物路径:dax-pay-doc/dist/
静态部署
前端应用构建后产物为静态文件,部署至 Nginx 或其他静态服务器即可。以下以 Web 管理端 + H5 端 + API 反向代理为例:
# Web 管理端(运营端)
server {
listen 80;
server_name admin.daxpay.example.com;
root /var/www/daxpay-admin; # 运营端 dist 产物
location / {
try_files $uri $uri/ /index.html; # SPA history 路由
}
# API 反向代理到主应用
location /server/ {
proxy_pass http://127.0.0.1:9999/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# H5 端
server {
listen 80;
server_name h5.daxpay.example.com;
root /var/www/daxpay-h5/vant-mobile; # 注意 H5 产物在 vant-mobile 子目录
location / {
try_files $uri $uri/ /index.html;
}
location /server/ {
proxy_pass http://127.0.0.1:9999/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}商户端
商户端 apps/daxpay-merchant/dist/ 部署方式与运营端一致,单独配置一个 server 即可。
构建验证
各应用启动成功后的验证方式汇总:
| 应用 | 验证方式 |
|---|---|
| 主应用 dax-pay-open | 控制台输出 应用 'dax-pay-open' 运行成功! · http://127.0.0.1:9999/actuator/health |
| channel-one | http://127.0.0.1:20100/actuator/health |
| channel-two | http://127.0.0.1:20200/actuator/health |
| channel-one-go | http://127.0.0.1:20100/actuator/health |
| Web 运营端(dev) | http://127.0.0.1:6999 |
| Web 商户端(dev) | http://127.0.0.1:7999 |
| H5 端(dev) | http://127.0.0.1:9500 |
| 小程序管理端(H5 dev) | http://127.0.0.1:9000 |
| 文档站(dev) | http://127.0.0.1:5173 |