# 技术栈

本页是**范围内**框架的依赖清单：11 个框架核心模块（`xlyEntry`、`xlyApi`、`xlyManage`、`xlyBusinessService`、`xlyPersist`、`xlyEntity`、`xlyFlow`、`xlyInterface`、`xlyMsg`、`xlyErpJmsProductor`、`xlyErpJmsConsumer`）、一个插件（`xlyPlc`），以及一个共享工具模块（`xlyPlatConstant`；尽管名字带 `Plat*`，但 `xlyPersist` 依赖其中的 `MultiThreadServer` 和 `TimeContant`）。

其他 plat 层模块（除 `xlyPlatConstant` 外的 `xlyPlat*`）、`xlyFace`（仍参与构建但不在文档范围内）和 AI 库均为[范围外](../../index.md)，本页不列。

## 如何读本页

两个列提供证据：

- **位置**：声明该库为 `api(...)` 或 `implementation(...)` 的 `build.gradle` 文件。多数库声明在 `xlyPersist/build.gradle`，并传递到依赖 `xlyPersist` 的模块。
- **范围内源码引用**：在上述范围内模块中对 `xly-src/<module>/src/` 执行 `grep -rln <package>` 的文件计数，并给出代表路径。“未发现源码引用”表示该库已声明，但范围内模块的 Java、HTML 或 yaml 源码没有直接引用。它仍可能作为传递依赖进入 classpath，或由 Spring Boot autoconfig 消费。

本页不解释“为什么选择某个库”。如果 gradle 或 yaml 中有明确注释（例如 Netty 版本 pin），会引用该注释；否则只记录事实。

## 1. 应用平台

| Library | Version | 位置 | 范围内源码引用 |
|---|---|---|---|
| Spring Boot | 2.2.5 | `xlyPersist/build.gradle`（web、starter、aop、data-redis、data-mongodb、websocket、activemq、freemarker）、`xlyApi/build.gradle`、`xlyFlow/build.gradle` | 所有 `*ApplicationBoot.java` 类（`xlyEntry`、`xlyApi`、`xlyInterface`、`xlyPlc`、构建时的 `xlyFace`）都继承 `SpringBootServletInitializer`。 |
| Embedded Tomcat | Spring Boot 2.2.5 BOM | `spring-boot-starter-web` 传递依赖 | `xlyEntry/src/main/resources/application-local.yml` 10-29 行配置 `server.port: 8080`、`server.servlet.context-path: /xlyEntry`、`server.tomcat.*`。 |
| Netty | 4.1.65.Final | `xlyPersist/build.gradle` | 无直接 Java import。gradle 注释说明：“引入mq后netty-common-4.1.45.Final.jar、与netty-all-4.0.42.Final.jar冲突，所以引入”；该版本用于覆盖 MQ 库引入的冲突传递版本。 |
| AspectJ Weaver | 1.9.6 | `xlyApi/build.gradle`（声明两次） | 1 个文件在 `xlyFlow/src/main/java/...` import。主要消费者是 Spring Boot AOP starter；xlyApi 中的显式 pin 与 import 无关。 |
| Lombok | 1.18.8（`xlyPersist`、`xlyFlow`）/ 1.18.20（`xlyApi`） | `xlyPersist/build.gradle`、`xlyApi/build.gradle`、`xlyFlow/build.gradle` | 19 个文件 import `lombok.*`。xlyApi 同时声明为 `implementation` 和 `annotationProcessor`。 |

## 2. 持久化 {#persistence}

| Library | Version | 位置 | 范围内源码引用 |
|---|---|---|---|
| MyBatis | 2.1.2 (`mybatis-spring-boot-starter`) | `xlyPersist/build.gradle`、`xlyApi/build.gradle`、`xlyFlow/build.gradle` | 102 个 Java 文件 import `org.apache.ibatis.*` 或 `org.mybatis.*`；76 个在 `xlyPersist`。Mapper XML 位于 `xlyPersist/src/main/resources/mapper/{erptable,business,test}/`。 |
| MyBatis-Plus | 3.3.0 | `xlyApi/build.gradle` | 2 个文件：`xlyApi/.../SqlUtil.java`、`xlyApi/.../BaseController.java`。不在 xlyApi 之外使用。 |
| MySQL Connector/J | 8.0.13 | `xlyPersist/build.gradle`、`xlyApi/build.gradle`、`xlyFlow/build.gradle` | yaml 中 `spring.datasource.driverClassName: com.mysql.cj.jdbc.Driver`。 |
| MSSQL JDBC | sqljdbc4 3.0 + 本地 `mssql-jdbc-6.2.2.jre8.jar` | `xlyApi/build.gradle`、`xlyInterface/build.gradle`、`xlyFlow/build.gradle` | 5 个文件：xlyFlow 3 个，xlyInterface 2 个。 |
| Oracle JDBC | 本地 `ojdbc6-11.2.0.4.jar` | `xlyFlow/build.gradle` | xlyFlow 中 2 个文件。 |
| Druid | 1.2.16 | `xlyPersist/build.gradle`、`xlyApi/build.gradle` | 6 个 Java 文件 import `com.alibaba.druid.*`；16 个 `application-*.yml` 引用 Druid 配置。 |
| HikariCP | 4.0.3 | `xlyApi/build.gradle` | 8 个文件引用 `com.zaxxer.hikari`。Java 配置包括 `MasterDataSourceConfig.java`、`SlaveDataSourceConfig.java`。 |
| Flyway | 5.2.1 | `xlyPersist/build.gradle` | 无 Java import。通过 yaml `spring.flyway.*` 配置，`enabled: false`。脚本在 `xlyEntry/src/main/resources/flyway/V*__*.sql`。 |
| PageHelper | 4.1.1 | `xlyPersist/build.gradle`、`xlyApi/build.gradle`、`xlyFlow/build.gradle` | 19 个文件 import `com.github.pagehelper.*`。 |
| jsqlparser | 3.2 | `xlyPersist/build.gradle` | 1 个 `xlyPersist/src/...` 文件 import `net.sf.jsqlparser`。 |

## 3. 缓存与内存

| Library | Version | 位置 | 范围内源码引用 |
|---|---|---|---|
| Spring Data Redis | 2.2.5 | `xlyPersist/build.gradle`、`xlyApi/build.gradle`、`xlyFlow/build.gradle` | 3 个 Java 文件 import `org.springframework.data.redis.*`；所有模块 yaml 都有 `spring.redis.*` 配置块。 |
| Lettuce | Spring Data Redis 2.2.5 默认 driver | 传递依赖 | 无直接 Java import；yaml 中有 `spring.redis.lettuce.pool.*`。 |
| Jedis | 2.9.0 | `xlyPersist/build.gradle`、`xlyApi/build.gradle`、`xlyFlow/build.gradle` | 5 个文件 import `redis.clients.jedis`，包括 `xlyMsg/.../wechat/util/JedisMsgUtil.java`。 |
| Guava | 18.0（`xlyPersist`、`xlyApi`）；20.0（`xlyFlow`） | `xlyPersist/build.gradle`、`xlyApi/build.gradle`、`xlyFlow/build.gradle` | 8 个文件 import `com.google.common.*`。 |

## 4. 工作流与调度

| Library | Version | 位置 | 范围内源码引用 |
|---|---|---|---|
| Activiti Engine | 5.17.0 | `xlyPersist/build.gradle`、`xlyApi/build.gradle`；由 `xlyFlow` 消费 | 35 个文件 import `org.activiti.*`。与 6.0 modeler 库的版本偏差见 [Activiti 集成](activiti.md)。 |
| Activiti Spring Boot REST API | 6.0.0 | `xlyFlow/build.gradle` | 由 Spring Boot autoconfig 和 xlyFlow 下 REST 端点消费。 |
| Activiti JSON Converter | 6.0.0 | `xlyFlow/build.gradle` | 用于 xlyFlow modeler 保存路径。 |
| Quartz | 2.3.0 | `xlyFlow/build.gradle` | 16 个文件 import `org.quartz.*`；xlyEntry yaml 通过 JDBC JobStore（`qrtz_*` 表）配置 `spring.quartz.*`。 |

## 5. 消息

| Library | Version | 位置 | 范围内源码引用 |
|---|---|---|---|
| Spring JMS + ActiveMQ starter | 2.2.5 | `xlyPersist/build.gradle` (`spring-boot-starter-activemq`) | 3 个文件 import `org.springframework.jms.*`；2 个文件 import `org.apache.activemq.*`。见[消息](../../api-reference/messaging.md)。 |
| RocketMQ Spring Boot Starter | 2.0.2 | `xlyPersist/build.gradle` | `xlyBusinessService/src/` 中 4 个文件 import `org.apache.rocketmq.*`。 |

## 6. 视图 / 模板

| Library | Version | 位置 | 范围内源码引用 |
|---|---|---|---|
| Thymeleaf | 3.0.15 | `xlyApi.build.gradle`、`xlyFlow.build.gradle`；也由 starter 传递 | 2 个 xlyFlow Java 文件 import；modeler 模板在 `xlyFlow/src/main/resources/templates/`。 |
| Freemarker | Spring starter 2.2.5 | `xlyPersist.build.gradle`、`xlyApi.build.gradle`、`xlyFlow.build.gradle` | 1 个 xlyFlow Java 文件 import。 |
| Apache Batik | 1.8 / 1.7 | `xlyPersist.build.gradle`、`xlyFlow.build.gradle` | 1 个 xlyFlow 文件 import；modeler 静态资源也携带 Batik 资产。 |

## 7. 认证

| Library | Version | 位置 | 范围内源码引用 |
|---|---|---|---|
| Apache Shiro (`shiro-spring`) | 1.3.2（`xlyPersist`）/ 1.4.2（`xlyApi`、`xlyFlow`） | `xlyPersist.build.gradle`、`xlyApi.build.gradle`、`xlyFlow.build.gradle` | 6 个 Java 文件 import。未发现 `@ConfigurationProperties("shiro")` 或 `shiro.*` 属性绑定，尽管 xlyEntry local yaml 有 `shiro:` 块。框架 HTTP auth 模式见 [API 参考](../../api-reference/index.md)。 |
| `shiro-ehcache` / `shiro-core` / `thymeleaf-extras-shiro` | 1.4.2 / 2.0.0 | `xlyFlow.build.gradle` | xlyFlow 模板中大量 Shiro tag；Java import 已计入上行。 |
| Bouncy Castle | `bcprov-jdk14:138` | `xlyApi.build.gradle` | 2 个 RSA 工具文件。 |
| commons-codec | 1.16.0 | `xlyPersist.build.gradle`、`xlyApi.build.gradle` | 18 个文件 import。 |

## 8. 报表与导出

打印 / 导出是框架第三方代码最大的消费面。

| Library | Version / 形态 | 位置 / 引用 |
|---|---|---|
| iText 5.x 与 lowagie iText 2.x | `itextpdf` 5.5.0 + `com.lowagie:itext` 2.1.7 | 都在 `xlyPersist.build.gradle`；两条分支同时存在于 classpath。 |
| Aspose Cells / Words | 本地 jar | `xlyPersist.build.gradle`；多个 `xlyPersist/src/` 文件 import `com.aspose.*`。 |
| Apache POI | 4.1.2（`xlyPersist` / `xlyFlow`）/ 3.15（`xlyApi`） | 36 个文件 import。 |
| jxls + jxls-poi / jxls-jexcel | 2.8.1 / 1.0.9 | 22 个文件 import `org.jxls.*`。 |
| EasyExcel | 本地 4.0.3 jars | `xlyBusinessService` 中 10 个文件 import。 |
| JasperReports / OLAP4J | 本地 jar | 报表相关路径 import。 |
| ZXing / Barcode4J / Pinyin4j / PDFBox / Thumbnailator / jacob | 多版本 | 条码、拼音、PDF、缩略图、COM 自动化等报表辅助功能。 |

## 9. 文件存储与 HTTP 客户端

| Library | Version | 位置 / 引用 |
|---|---|---|
| Aliyun OSS SDK | 2.2.0 | `xlyPersist/src/main/java/com/xly/utils/OssUtil.java`。 |
| commons-fileupload / commons-io | 1.5 / 2.5 | xlyFlow、xlyPersist、xlyEntry、xlyBusinessService 中有 import。 |
| OkHttp + Okio | 4.10.0 / 2.10.0 | xlyApi 中 2 个文件 import。 |
| Apache HttpClient | 4.5.5 | xlyBusinessService 中 1 个文件 import。 |
| javax.mail | 1.6.2 | xlyPersist 中 1 个文件 import。 |

## 10. JSON 与通用工具

| Library | Version | 范围内引用 |
|---|---|---|
| FastJson | 1.2.15（`xlyPersist`、`xlyApi`）/ 1.2.60（`xlyFlow`） | 83 个文件 import。 |
| Jackson | 2.9.7（xlyFlow 显式）+ Spring 传递依赖 | 22 个文件 import。 |
| Hutool | 5.6.5（`xlyPersist`）/ 5.8.5（`xlyApi`、`xlyFlow`） | 271 个文件 import，覆盖所有范围内模块。 |
| commons-lang3 / commons-collections4 | 3.6 / 3.8.1；4.1 | 多模块 import。 |
| Groovy | `groovy-all` 3.0.2 | 5 个 Java 文件 import `groovy.util.logging.Slf4j`，看起来是遗留 import。 |
| Struts2 JSON plugin | 2.5.30 | 仅 `xlyPersist/src/main/java/com/xly/utils/FeedPage.java`；框架其他部分运行在 Spring MVC 上。 |
| SnakeYAML / JDOM / validation-api | 多版本 | xlyFlow、xlyApi、xlyInterface、xlyMsg 等少量引用。 |

## 11. 硬件集成

| Library | Version | 范围内源码引用 |
|---|---|---|
| HslCommunication | 本地 `HslCommunication.jar` | 9 个文件引用，分布在 xlyPersist、xlyBusinessService、xlyPlc。xlyPlc 是 PLC 桥；见[切片 6](../../slices/06-hardware.md)。 |

## 12. 通知

| Library | Version | 范围内源码引用 |
|---|---|---|
| Aliyun DingTalk SDK | `com.aliyun:dingtalk` 2.1.14 | `xlyMsg/src/main/java/com/xly/dingtalk/` 中 1 个文件；见[通知](../../api-reference/notifications.md)。 |
| `alibaba-dingtalk-service-sdk` | 2.0.0 | xlyMsg 中 1 个文件 import `com.dingtalk.api.*`。 |
| Jeewx-API（微信） | 本地 `jeewx-api-1.3.2.jar` | xlyInterface 中 5 个文件引用。 |

## 13. 授权许可

| Library | Version | 范围内源码引用 |
|---|---|---|
| TrueLicense | 本地 `trueswing.jar` + `truexml.jar` + `turelicense.jar` | `xlyBusinessService/src/main/java/com/xly/license/` 下 5 个文件；xlyEntry local yaml 中 `License:` 块默认 `checkLic: false`。 |

## 14. 日志

| Library | Version | 范围内源码引用 |
|---|---|---|
| Logback | `logback-classic` 1.2.3 | 5 个文件 import；配置在 `xlyEntry/src/main/resources/logback-spring.xml`。 |
| log4j 1.x | 1.2.17 | xlyFlow 中 1 个文件 import；Druid stat filter yaml 中也出现 `filters: stat,log4j2`。 |

## 15. 构建与开发

| Library | Version | 用途 |
|---|---|---|
| Gradle wrapper | 已提交 | 构建工具；见[本地运行](running-locally.md)。 |
| Spring Boot Gradle plugin | 2.2.5.RELEASE | repo 根 `build.gradle`，构建可运行 WAR。 |
| Spring Boot configuration processor | 2.2.5.RELEASE | xlyApi annotationProcessor，用于 `@ConfigurationProperties` IDE 元数据。 |

## 已声明但未发现范围内源码引用

以下库出现在 `build.gradle` 中，但在 `xly-src/<in-scope module>/src/` 下未发现 Java import、HTML 模板引用或 yaml 属性绑定。它们可能是传递依赖、Spring Boot autoconfig 消费的库、已删除代码遗留，或只是冗余声明。

| Library | 声明位置 | 备注 |
|---|---|---|
| Kaptcha、JNA、oshi-core、UserAgentUtils | `xlyFlow.build.gradle` | 未发现 import；分别用于验证码、原生访问、系统信息、UA 解析。 |
| Barbecue、Gson、commons-pool2 | `xlyPersist.build.gradle` | 未发现 import；当前活跃条码路径是 Barcode4J + ZXing，JSON 路径是 FastJson + Jackson。 |
| Baidu SDK | `xlyInterface.build.gradle` 本地 jar | 未发现 `com.baidu` import。 |
| `mchange-commons-java` | `xlyFlow.build.gradle` | 未发现直接 import。 |
| Springfox | `xlyInterface.build.gradle` | 未发现直接 Java import；通过 jar 静态资源提供 `/swagger-ui.html`，但没有 Docket bean。见 [Webhook API](../../api-reference/webhooks.md)。 |

## 值得注意的版本偏差与本地 jar

| 项 | 细节 |
|---|---|
| Shiro | `xlyPersist` 为 1.3.2；`xlyApi` 和 `xlyFlow` 为 1.4.2。 |
| FastJson | `xlyPersist` / `xlyApi` 为 1.2.15；`xlyFlow` 为 1.2.60。 |
| Hutool | `xlyPersist` 为 5.6.5；`xlyApi` / `xlyFlow` 为 5.8.5。 |
| Apache POI | `xlyPersist` / `xlyFlow` 为 4.1.2；`xlyApi` 为 3.15。 |
| Guava | `xlyPersist` / `xlyApi` 为 18.0；`xlyFlow` 为 20.0。 |
| commons-lang3 | `xlyPersist` 为 3.6；`xlyFlow` 为 3.8.1。 |
| Lombok | `xlyPersist` / `xlyFlow` 为 1.18.8；`xlyApi` 为 1.18.20。 |
| iText | `xlyPersist` 同时声明 `itextpdf` 5.5.0 和 `com.lowagie:itext` 2.1.7。 |
| Activiti | 流程引擎 5.17.0（`xlyPersist` / `xlyApi`）；rest-api 与 json-converter 6.0.0（`xlyFlow`）。见 [Activiti 集成](activiti.md)。 |
| 本地 jar | `xlyPersist/src/main/java/lib/` 下有 Aspose、jacob、HslCommunication、QRCode、OLAP4J、JasperReports、EasyExcel 等；`xlyFlow` 和 `xlyInterface` 下有 MSSQL / Oracle / Baidu / Jeewx jar；`xlyBusinessService` 下有 TrueLicense jar。 |
| Spring Boot | 2.2.5.RELEASE，固定在根 `build.gradle` plugin block，并由使用 starter 的各模块声明。 |

## 本清单有意不包含

- plat 层（`xlyPlat*` 模块）及仅在其中声明的依赖；按[首页](../../index.md)说明属于范围外。
- AI / LLM 库（`xlyApi/build.gradle` 中的 `com.theokanning.openai-gpt3-java:service` 0.11.1 和 `com.unfbx:chatgpt-java` 1.0.8），范围外。
- `xlyEntity/build.gradle` 中声明的 MongoDB starter（`spring-boot-starter-data-mongodb` 2.2.5）。`xlyEntity` 中有 22 个 `@Document` 类，20 个名为 `PLAT_*`，另 2 个是 `DIKE_TEST*` 测试夹具。对范围内模块 grep `MongoTemplate` / `MongoRepository` 只发现 `xlyPersist/.../dao/platmongo/BaseMongoDao.java`（服务 plat 层）；没有范围内模块调用 Mongo API。见[首页范围说明](../../index.md)。
- `xlyFace`，范围外。
