仓库采用双轨构建:
ai-server、ai-gateway)由根 pom.xml 以 Maven 聚合工程统一编排,继承 spring-boot-starter-parent:3.5.16。ai-electron)基于 Electron + Vue/TS 前端,通过 ee-bin(Electron 封装工具)+ electron-builder 完成多平台打包。根 POM (pom.xml) 仅声明 <packaging>pom</packaging> 与两个子模块,版本为 1.0;Spring Boot 依赖版本由父 POM 托管。Java 子模块各自在 pom.xml 中配置 spring-boot-maven-plugin 与 maven-compiler-plugin(含 Lombok annotation processor),没有统一的 pluginManagement,因此各模块自行管理插件版本。
spring-boot-maven-plugin 默认生成 fat jar(含所有依赖),可直接 java -jar 启动。ai-server/pom.xml 额外通过 maven-jar-plugin 的 <execution id="thin-jar"> 输出带 classifier=thin 的 ai-server-{version}-thin.jar,Manifest 中写入 Main-Class: com.zsjz.ai.App 及 Class-Path: lib/;配合 maven-dependency-plugin 将 runtime 依赖拷贝到 target/lib/,形成“瘦包 + lib 目录”的可分部署形态。ai-server 的 spring-boot-maven-plugin 显式设置 <workingDirectory>${project.parent.basedir}</workingDirectory>,强制运行时 CWD 指向仓库根,使 PathConst 能正确解析 QingJian/ 资产与 ./data/files,避免产物与附件被写进 ai-server/QingJian。ai-gateway 通过 maven-resources-plugin 在 generate-resources 阶段把根 sql/gateway.sql 复制到 src/main/resources/db/gateway.sql,供 Spring SQL Init 幂等建表。ai-server 使用 spring-boot-starter-test + JUnit;ai-gateway 额外引入 reactor-test;ai-electron 使用 vitest(见 vitest.config.mts)。ai-electron/package.json 定义脚本 build → npm run build-frontend && npm run build-electron && ee-bin encrypt,先编译前端再打包 Electron。ai-electron/frontend/bin/build.sh 只是 cd .. && pnpm build && cd bin,实际由 Vite(vite.config.ts)驱动;pnpm 锁文件 pnpm-lock.yaml 锁定依赖。ee-bin 根据命令参数选择目标(win64/win_e/mac_arm64/mac/linux),底层调用 electron-builder;平台配置集中在 ai-electron/cmd/builder.json(以及 builder-linux.json、builder-mac.json、builder-mac-arm64.json),定义产物名 ${productName}-${os}-${version}-${arch}.${ext}、NSIS Windows 安装包、Linux deb 包、asar 归档、多语言(en-US/zh-CN)。directories.output = "out",已存在的 ai-electron/out/win-unpacked/、latest.yml、builder-effective-config.yaml 即为历史产物。electron-updater,builder.json 中 publish.provider = "generic",url 为空占位,需外部配置 CDN。.github/workflows、.gitlab-ci.yml、Jenkinsfile 等流水线文件;也未发现仓库根级别的 Dockerfile。ai-electron/frontend/node_modules/.pnpm/comlink@.../Dockerfile 仅为第三方依赖自带,非本项目产物。cmd/uninstall.bat 与 cmd/uninstall.sh 提供安装后的卸载能力。<version>1.0</version> 统一管理;Electron 客户端版本号位于 ai-electron/package.json 的 "version": "200.0.0",二者独立。spring-boot-starter-parent:3.5.16(根 POM 强制)。ai-server 运行时必须以仓库根为 CWD(由 spring-boot-maven-plugin.workingDirectory 强制),否则资源路径与数据目录会错乱。ai-server 的 thin jar 与 target/lib/ 必须同目录放置才能被 Main-Class 正确加载(由 Manifest 的 classpathPrefix=lib/ 强制)。ai-gateway 的 DDL 只允许放在仓库根 sql/gateway.sql,由 Maven 复制至 classpath(由 maven-resources-plugin 的 include 规则强制)。${productName}-${os}-${version}-${arch}.${ext} 模板(由 builder.json 的 artifactName 字段强制)。pnpm-lock.yaml),构建应使用 pnpm 而非 npm/yarn。