- 站点标题、首页与文档正文品牌名由「收支管理系统」改为「汇账 Ledgerly」 - package.json 包名改为 ledgerly-docs - 维护脚本环境变量由 FINANCE_* 改为 LEDGERLY_*,测试库路径与示例同步 - 项目结构、构建部署、开发环境等文档中的目录名与 jar 名改为 ledgerly - 保留在线体验域名与 OSS 截图前缀不变
3.0 KiB
3.0 KiB
构建与部署
前置条件
- JDK 21(Temurin 21 LTS)
- Node.js(构建前端时需要)
开发模式
前后端分离,便于调试:
# 后端(默认 8080)
cd ledgerly
set JAVA_HOME=D:\venv\jdk-21
gradlew.bat bootRun
# 前端(默认 5173,接口代理到 8080)
cd ledgerly/frontend
npm run dev
- 后端地址:http://localhost:8080
- 后端 API 文档:http://localhost:8080/doc.html
- 前端地址:http://localhost:5173,接口经 Vite 代理到后端 8080
打包可执行 jar(前后端一体化)
bootJar 会先执行前端 npm run build,再把 frontend/dist 复制到 jar 内的 BOOT-INF/classes/static/,单文件同时提供页面与接口。
gradle bootJar
# 或使用宿主机脚本
./package.sh
输出:build/libs/ledgerly-0.0.1-SNAPSHOT.jar
启动(默认 8080,可另指定端口):
java -jar build/libs/ledgerly-0.0.1-SNAPSHOT.jar --server.port=18081
访问对应端口即可;刷新 /dashboard 等子路由由后端 SpaErrorController 回退到 index.html。
::: tip 提示 jar 内置的前端为生产构建,访问时与后端同源,无需额外的反向代理。 :::
构建任务链(build.gradle):
npmInstall:安装前端依赖(node_modules存在且package.json未变化时跳过)frontendBuild:执行npm run buildbootJar:依赖frontendBuild,并将前端产物打入静态资源目录
Docker 部署
run/docker-compose.yml 定义前后端两个服务,纯复用本地镜像、不构建新镜像:
| 服务 | 镜像 | 端口 | 说明 |
|---|---|---|---|
| backend | eclipse-temurin:21-jre |
18080→8080 | 挂载 run/backend/*.jar,持久化 config/、data/、logs/ |
| front | nginx:alpine |
15180→80 | 挂载 run/front/dist 与 Nginx 配置 |
环境变量 DB_URL / DB_USERNAME / DB_PASSWORD 仅作为首次启动的默认配置来源,也可在界面中完成数据库配置。
桌面 GUI 启动器
launcher 包提供系统托盘 + 控制窗口的桌面启动器(启动/停止服务、打开浏览器、查看日志),通过 bootGuiJar 打包:
gradle bootGuiJar
- 入口类:
cn.rosercode.finance.launcher.LauncherMain - 依赖 JavaFX 与 dorkbox SystemTray,仅加入带 GUI 的 jar(
guiRuntime配置),普通 jar 不含这些依赖 - 平台默认 Windows(可通过
-PjavafxPlatform=linux本地验证) - JavaFX 与 JNA 原生库需
requiresUnpack从嵌套 jar 解压
注意:该启动器为规划中的能力,具体实现以当前源码为准。
分发形态
| 形态 | 说明 |
|---|---|
| jar | bootJar,需 JDK 21 运行 |
| jar(带 GUI) | bootGuiJar,内含桌面启动器 |
| 可执行文件(控制台 / GUI) | 规划中,计划采用 jpackage(JDK 自带,各平台分别构建) |
| Docker 镜像 | 通过 run/docker-compose.yml 编排 |