Files
starRiverProperty/docs/architecture/V1-V2-电梯依赖比对.md
T
反编译工作区 e8672a3c7b fix: relocate cwos-portal decompiled output to correct path; remove nested directory
Former-commit-id: dc30d42a8c55ed8b2382a41dc2434233fbed9930
2026-04-29 12:09:48 +08:00

170 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# V1 与 V2 电梯应用依赖:详细比对说明
本文说明 **V1 历史运行包****V2 Maven 反应堆** 在依赖上的对应关系、已核对的一致项、已知差异与后续可执行动作。比对以仓库内 `**cw-elevator-application-V1.0.0.20211103`** 为 V1 基线。
---
## 1. V1 运行包 classpath 结构(与 V2 可执行 JAR 的对应)
| 位置 | 路径 | 数量 | 含义 |
| -------------------- | ------------------------------------------------------ | ------- | --------------------------------------------------------------------------------- |
| **第三方与 Spring 栈** | `cw-elevator-application-V1.0.0.20211103/lib/*.jar` | **245** | 与 Boot 1.5、Spring Cloud、MyBatis、Netty、Feign 等一致;文件名即 **artifactId-version** 形态为主。 |
| **云从 + 电梯模块 + 智能组件** | `cw-elevator-application-V1.0.0.20211103/cw_lib/*.jar` | **24** | 与 V2 `pom.xml`**显式声明版本** 的坐标对齐;电梯四模块以 **1.0-SNAPSHOT** JAR 形式落盘。 |
V2 可执行包由 `spring-boot-maven-plugin` repackage 后,上述两类依赖会进入 `**BOOT-INF/lib/`**;概念上 **V2 ≈ cw_lib lib 的传递闭包**,但 **具体 JAR 列表以 Maven 解析结果为准**
**完整文件名清单(机器可读)**
- `docs/architecture/data/v1-elevator-lib-jars.txt`245 行)
- `docs/architecture/data/v1-elevator-cw-lib-jars.txt`24 行)
---
## 2. `cw_lib`24)与 V2 反应堆版本:逐项一致
下列 JAR 在 V1 `cw_lib` 中的 **文件名** 与 V2 `maven-cw-elevator-application/pom.xml``<properties>` / `dependencyManagement` **一致**(脚本已自动核对):
| # | V1 `cw_lib` 文件名 | V2 约束来源 |
| --- | --------------------------------------------------------- | ----------------------------------------------------------------------------- |
| 1 | `cloudwalk-common-event-3.7.2-Brussels-SRX.jar` | `cloudwalk.internal.version` |
| 2 | `cloudwalk-common-result-3.7.2-Brussels-SRX.jar` | `cloudwalk.legacy.public.version` |
| 3 | `cloudwalk-common-serial-3.7.2-Brussels-SRX.jar` | `cloudwalk.legacy.public.version` |
| 4 | `cloudwalk-common-service-3.7.2-Brussels-SRX.jar` | `cloudwalk.internal.version` |
| 5 | `cloudwalk-common-web-3.7.2-Brussels-SRX.jar` | `cloudwalk.legacy.public.version` |
| 6 | `cloudwalk-device-manager-common-2.0.2.jar` | V1 随包固定;V2 由 `**intelligent-cwoscomponent-rest`** 等传递引入(反应堆未单独 pin 版本,以解析树为准) |
| 7 | `cloudwalk-device-manager-interface-2.0.2.jar` | 同上 |
| 8 | `cloudwalk-device-sdk-protocol-entity-2.2.0.jar` | 同上 |
| 9 | `cloudwalk-intelligent-component-lock-1.1.1-SNAPSHOT.jar` | `intelligent.lock.version` |
| 10 | `cw-elevator-application-common-1.0-SNAPSHOT.jar` | V2`cn.cloudwalk.elevator:cw-elevator-application-common:**2.0-SNAPSHOT`** |
| 11 | `cw-elevator-application-data-1.0-SNAPSHOT.jar` | V2`…-data:**2.0-SNAPSHOT`** |
| 12 | `cw-elevator-application-service-1.0-SNAPSHOT.jar` | V2`…-service:**2.0-SNAPSHOT**` |
| 13 | `cw-elevator-application-web-1.0-SNAPSHOT.jar` | V2`…-web:**2.0-SNAPSHOT**` |
| 14 | `cwos-common-aks-interface-1.0.0-SNAPSHOT.jar` | V1 随包;V2 若未在反应堆显式声明则来自传递依赖 |
| 15 | `cwos-component-resource-data-1.0.0-SNAPSHOT.jar` | 同上 |
| 16 | `cwos-component-resource-interface-1.0.0-SNAPSHOT.jar` | 同上 |
| 17 | `cwos-device-authentication-interface-1.0.0-SNAPSHOT.jar` | 同上 |
| 18 | `cwos-java-sdk-resource-1.0.0-SNAPSHOT.jar` | `cwos.sdk.resource.version` |
| 19 | `cwos-portal-interface-1.0.0-SNAPSHOT.jar` | V1 随包;V2 传递 |
| 20 | `cwos-sdk-event-1.5.0-SNAPSHOT.jar` | `cwos.sdk.event.version` |
| 21 | `davinci-manager-common-1.1.7-SNAPSHOT.jar` | 与 `davinci-manager-storage` 同族 |
| 22 | `davinci-manager-storage-1.1.7-SNAPSHOT.jar` | `davinci.manager.storage.version` |
| 23 | `intelligent-cwoscomponent-interface-2.9.2-xinghewan.jar` | `intelligent.cwoscomponent.version` |
| 24 | `intelligent-cwoscomponent-rest-2.9.2-xinghewan.jar` | `intelligent.cwoscomponent.version` |
**结论(云从/智能主干)**:与对拍、校验切面相关的 `**cloudwalk-common-*` 3.7.2-Brussels-SRX** 与 `**intelligent-cwoscomponent-*` 2.9.2-xinghewan** 等,**V1 cw_lib 与 V2 POM 显式口径一致**;对拍行为差异 **不宜** 首先归因于「cloudwalk 主版本不一致」。
**电梯自研模块**V1 为 **1.0-SNAPSHOT** 四 JARV2 反应堆为 **2.0-SNAPSHOT** —— 属 **预期版本升级**,需用源码白名单比对(见 `V1-V2-电梯API源码比对白名单.md`),而非依赖坐标「偷偷不一致」。
---
## 3. V1 `lib`245)与 V2 `dependencyManagement`:显式对齐项
V2 反应堆在 `<properties>`**主动钉死**、且与 V1 `lib`**常见文件名** 对齐的第三方包括(节选):
| 属性 | 值 | V1 `lib` 中典型 JAR |
| ------------------------------------------------------- | --------------- | --------------------------------------------- |
| `fastjson.version` | 1.2.73 | `fastjson-1.2.73.jar` |
| `guava.version` | 20.0 | `guava-20.0.jar` |
| `poi.version` | 3.15 | `poi-3.15.jar``poi-ooxml-3.15.jar` |
| `ant.version` | 1.9.6 | 见下节「多版本」 |
| `mybatis-spring-boot.version` | 1.3.1 | `mybatis-spring-boot-starter-1.3.1.jar` |
| `pagehelper.version` / `pagehelper-spring-boot.version` | 5.1.2 / 1.2.5 | `pagehelper-5.1.2.jar` 等 |
| `shardingsphere.version` | 4.0.0 | `sharding-jdbc-spring-boot-starter-4.0.0.jar` |
| `spring-cloud.version` | **Edgware.SR6** | 见下节 |
**Spring Boot**V2 父 POM 为 `**spring-boot-starter-parent` 1.5.17.RELEASE**V1 `lib` 中可见 `**spring-boot-*-1.5.17.RELEASE.jar`**,主版本一致。
---
## 4. V1 `lib` 中的「多版本并存」风险(V2 由 BOM 收敛)
`lib` 内文件名做 **artifact 前缀聚合** 后,典型 **多版本** 包括:
| 前缀 | 并存版本(示例) | 说明 |
| ------------ | --------------- | ------------------------------------------------------------------- |
| `feign-core` | 8.18.0 与 9.5.0 | 历史传递与 Netflix/OpenFeign 栈叠加;**实际生效顺序依赖 fat JAR Class-Path / 装载顺序**。 |
| `ant` | 1.6.5 与 1.9.6 等 | V2 反应堆仅钉 `**ant.version` = 1.9.6**V1 物理目录仍含旧 ant。 |
| `rxjava` | 1.x 与 2.x | 常见于 Netflix + 其它客户端并存。 |
V2 由 `**spring-boot-dependencies` + `spring-cloud-dependencies`Edgware.SR6** 统一解析,**理论上** 比「手工铺 245 个 jar」更可重复;若需 **字节级** 证明与 V1 运行时一致,应在 **同一 JDK** 下导出 `**mvn dependency:tree`** 与 V1 进程 `**jcmd <pid> VM.classloader_hierarchy`** / 或解压 fat JAR 的 `BOOT-INF/lib` 做集合 diff。
---
## 5. V2 反应堆「直接依赖」模块一览(非传递闭包)
| 模块 | 直接引入的典型坐标(无版本处由 `dependencyManagement` 解析) |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `cw-elevator-application-starter` | `spring-boot-starter-web`、MyBatis、Actuator、Cache、AOP、OpenFeign、`cw-elevator-application-web` |
| `cw-elevator-application-web` | `cloudwalk-common-web``cw-elevator-application-service` |
| `cw-elevator-application-service` | `cloudwalk-common-service``spring-tx``cloudwalk-common-serial``cwos-java-sdk-resource``jackson-datatype-jsr310``cloudwalk-intelligent-component-lock``cloudwalk-common-event``cwos-sdk-event``cw-elevator-application-data``davinci-manager-storage``intelligent-cwoscomponent-rest``spring-cloud-starter-openfeign``javax.annotation-api``jsr305` |
| `cw-elevator-application-common` | `cloudwalk-common-result`、Guava、POI、Ant、thumbnailator、`commons-io`、fastjson、`tomcat-embed-core``cloudwalk-common-web``spring-boot-autoconfigure``commons-lang3`、ZXing、zip4j、`spring-web``spring-data-redis`、lombok、`jackson-datatype-jsr310` |
| `cw-elevator-application-data` | `cw-elevator-application-common``cloudwalk-common-result``spring-beans`/`context`、MyBatis、mysql、`mybatis-spring-boot-starter`、HikariCP、pagehelper、shardingsphere |
**与 V1 的差异点**V2 `**cw-elevator-application-common`** 显式增加 `**spring-boot-autoconfigure`**(见模块内注释:私服上 `cloudwalk-common-web` 传递不完整时的 **编译 classpath 补齐**)。V1 若完全依赖传递,**编译期/工具链** 与 V2 可能略有不同,但 **运行时** 通常仍由 Boot 引入同一类库。
---
## 5.1 反应堆子模块报「在 nexus-public 找不到 sibling SNAPSHOT」
**现象**`data``cw-elevator-application-common``web``service` 等,日志只出现 `Downloading from nexus-public: .../elevator/...`
**原因**:全局 `~/.m2/settings.xml``**mirrorOf=*`**(或等价过宽)时,Maven 易把 **本反应堆未发布到私服的 SNAPSHOT** 也导向 Nexus,导致失败。**不需要**为此逐个 `deploy` 电梯子模块到私服。
**本仓库已落盘**`maven-cw-elevator-application/.mvn/maven.config` + `.mvn/settings.xml`:用 `-s` **绕过** `~/.m2`profile 激活 `**nexus-public`http**;并含 一条 `id=maven-default-http-blocker``mirrorOf=dummy` 的占位 `<mirror>`,用于覆盖 Maven 3.8.1+ 安装目录里对 `**external:http:*`** 的默认拦截(否则会出现 `Blocked mirror for repositories: [nexus-public (...http...)]`)。**不是** `mirrorOf=*`,不会把反应堆 sibling 整体导向私服。私服若需账号,请在 `.mvn/settings.xml` 内补 `<servers>`(勿提交密钥)。若 Nexus 已支持 **HTTPS**,更推荐改仓库 URL 为 `https://` 并删除该占位 mirror。
**隔离构建**`./scripts/build_nexus_only.sh` 会额外 `purge` `**cn/cloudwalk/elevator`** 下 `*.lastUpdated`,并在使用 `clean install` 时把 sibling 写入隔离库。
---
## 6. 生成「V2 全量传递依赖树」与与 V1 的集合 diff(推荐下一步)
当前环境若 **无法安装反应堆子模块****无法访问 Nexus**,则无法在 CI 外自动生成 **V2 完整 245+ 级传递树**。请在 **可解析依赖** 的环境、于 `**maven-cw-elevator-application` 根**执行(**自动使用 `.mvn/settings.xml`**;与 `build_nexus_only.sh` 对齐隔离库时可加 `-Dmaven.repo.local=$PWD/.m2-elevator-nexus-only`):
```bash
cd maven-cw-elevator-application
mvn -pl cw-elevator-application-starter -am -DskipTests clean install
mvn -pl cw-elevator-application-starter -am -DskipTests dependency:tree \
-DoutputFile=cw-elevator-application-starter/target/v2-starter-dependency-tree.txt
```
然后将 `**target/v2-starter-dependency-tree.txt**` 中的 `groupId:artifactId:jar:version``**docs/architecture/data/v1-elevator-lib-jars.txt**` 做集合差集(仅 artifactId-version 对齐即可),即可得到 **「V2 有而 V1 lib 无」** 与 **「V1 lib 有而 V2 未解析到」** 的完整列表。
---
## 7. 自动化脚本(可重复输出摘要)
仓库根目录执行:
```bash
python3 scripts/compare_v1_v2_elevator_dependencies.py
```
将打印:`cw_lib` 与 V2 属性对齐核对、V1 `lib` 多版本示例、以及生成 `dependency:tree` 的 Maven 命令提示。
---
## 8. 总括结论(供评估「下一步计划」)
1. **云从公共件 + intelligent 2.9.2 + davinci/cwos 等与对拍强相关的坐标**V1 `cw_lib` 与 V2 `pom.xml` **已对齐**
2. **电梯四模块**V1 **1.0-SNAPSHOT** JAR vs V2 **2.0-SNAPSHOT** 源码 —— **预期差异**,行为差应结合 **源码白名单 diff + 运行时** 看。
3. **245 个第三方 JAR**V2 由 **Boot 1.5.17 + Cloud Edgware.SR6 BOM** 收敛;V1 物理目录存在 **Feign/Ant/RxJava 多版本**,**与「仅业务源码不同」假设不完全相容** —— 若要对齐到「与 V1 进程 classpath 完全一致」,需 **依赖树 diff**,不能只盯 `cw_lib`
4. **下一步建议优先级**:① 在 CI 生成并归档 `**dependency:tree`**;② 与 `v1-elevator-lib-jars.txt`**差集报告**;③ 对差集中 **多版本冲突** 项做 **运行时类加载验证**(仅静态比对不足以解释偶发 NPE/空响应)。
---
## 相关文档
- API 调用链源码比对白名单:`V1-V2-电梯API源码比对白名单.md`
- 对拍与根因说明:`../../maven-cw-elevator-application/tools/elevator_api_parity/API-RECONCILIATION.md`