Skip to content

项目构建

更新时间:2026/7/26 17:36:13

本页详细说明 DaxPay 每个应用的编译、构建产物与启动方式。按后端应用、前端应用两条线组织,每个应用独立成节,包含环境要求、构建命令、产物路径与启动验证。

首次试用

只想快速跑起来体验功能,建议直接走 Docker Compose,无需本地编译。本页面向需要二次开发或定制部署的场景。

📷 [配图]:整体编译流程图 —— 展示从源码到可运行产物的全链路(后端 jar / 前端 dist / 小程序包),标注各应用之间的依赖关系与启动顺序

环境准备

各应用共同依赖与各自专属依赖汇总如下,按需安装。

环境版本要求适用应用说明
JDK25+所有 Java 后端Java 运行环境(容器化部署可不装,镜像自带)
mvnd最新所有 Java 后端Maven Daemon,加速编译
Go1.26+dax-pay-channel-one-goGo 通道子应用
Node.js^22.13.0 || ^24.0.0所有前端 + 文档站前端构建环境
pnpm>=10.0.0所有前端 + 文档站包管理器(强制,preinstall 会拦截 npm/yarn)
PostgreSQL14+后端运行依赖主数据库(编译不需要,运行需要)
Redis7+后端运行依赖分布式缓存
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-opendaxpay-devdaxpay-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

编译

bash
cd dax-pay-open
# 完整打包(产出可运行 jar)
mvnd clean package "-Dmaven.test.skip=true" -T 4

禁止使用 install

mvnd install 会触发全量打包并写入本地 Maven 仓库,输出庞大、耗时长,且经 PowerShell 管道易阻塞卡死。日常构建验证只使用 compile,生产打包使用 package

单模块快速编译(只验证改动涉及的模块,比全量快很多):

bash
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

启动

bash
# 开发模式(端口 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

生产环境凭证通过环境变量注入,详见 配置说明 - 生产环境变量清单

验证

bash
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

编译

bash
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

启动

bash
# 开发模式(端口 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

验证

bash
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

编译

bash
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

启动

bash
# 开发模式(端口 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

验证

bash
curl http://127.0.0.1:20200/actuator/health
# 预期 {"status":"UP"}

启用 channel-two

主应用默认路由配置中 channel-two 为注释状态,如需启用需在 application.ymldaxpay.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 版端口、路由完全重叠,同时启动会冲突。部署时二选一。

编译

bash
cd dax-pay-channel-one-go
# 编译二进制
go build -o daxpay-channel-one-go ./cmd/server/

启动

bash
# 方式一:直接运行二进制
./daxpay-channel-one-go

# 方式二:go run(开发期)
go run ./cmd/server/

配置加载:默认读取 configs/config.yaml,可通过环境变量 DAXPAY_CONFIG 指定其他路径。

验证

bash
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运营(管理)端6999admin
apps/daxpay-merchant商户端7999merchant

安装与开发

bash
cd dax-pay-ui
pnpm install

# 运营端开发(端口 6999)
pnpm run dev:admin

# 商户端开发(端口 7999)
pnpm run dev:merchant

构建

bash
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/

类型检查与代码规范

bash
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

安装与开发

bash
cd dax-pay-h5
pnpm install

# 开发(端口 9500,支持 ?device=pc|mobile 强制切换设备视图)
pnpm run dev

构建

bash
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

安装与开发

bash
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:appuni-app CLI

构建

编译目标命令
H5pnpm run build:h5
微信小程序pnpm run build:mp-weixin
支付宝小程序pnpm run build:mp-alipay
抖音小程序pnpm run build:mp-toutiao
Apppnpm 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)

安装与开发

bash
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 默认)

安装与开发

bash
cd dax-pay-doc
pnpm install
pnpm run dev

构建

bash
cd dax-pay-doc
pnpm run build    # 构建并生成 llms.txt / llms-full.txt
pnpm run preview  # 本地预览构建产物

产物路径:dax-pay-doc/dist/


静态部署

前端应用构建后产物为静态文件,部署至 Nginx 或其他静态服务器即可。以下以 Web 管理端 + H5 端 + API 反向代理为例:

nginx
# 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-onehttp://127.0.0.1:20100/actuator/health
channel-twohttp://127.0.0.1:20200/actuator/health
channel-one-gohttp://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

下一步

  • 项目运行:按场景选择运行方式的总入口
  • 配置说明:Profile 切换、数据库、Redis、密钥与生产环境变量(按应用分单元)
  • Docker 部署:镜像构建与 docker-compose 完整模板

基于 GNU LGPL v3.0 协议开源