Files
starRiverProperty/docs/build/本地编译说明.md
T
反编译工作区 418c7db202 feat(elevator): 对齐 V1 lib 的 Davinci/扫描/事件与部署配置
- davinci-manager-storage:FilePart 路径与基址按 V1 JAR(/portal/file、/part/*、GET /download)
- 启动类:扫描 cn.cloudwalk.serial 与 cn.cloudwalk.cwos.client.resource,补 UUIDSerial 与 ApplicationService
- deploy:v1/v2 application 中 cloudwalk.serial.enabled、Kafka 指向 192.168.3.12:9092;deploy/.gitignore 忽略日志
- cloudwalk-common-serial:补充 META-INF/spring.factories(Boot 自动配置)
- 电梯:Session 配置、Davinci Bean、Feign 包、MQTT/Visitor/Zone Feign;部署脚本与 API parity 工具更新
- 文档与根脚本若干;未纳入大体积 jar/zip 与 v1 CFR 对比目录

Made-with: Cursor

Former-commit-id: b76d142d13ebb5c0898de2d9d11bc583876829c2
2026-04-28 01:02:31 +08:00

189 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.
# 本地编译说明(Maven 工作区)
## 1. 环境与 JVM
- **Maven 进程 JVM**:须为 **JDK 8**(与 `maven-enforcer-plugin` 及各父 POM `java.version` 一致)。
示例(Linux):
```bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
java -version # 应显示 1.8.x
```
## 2. 私服与网络
-`pom.xml` 中默认 Nexus 为 **`http://192.168.3.12/...`**(或带端口 `8081``maven-public`)。
- **须在能访问该私服的网络环境**(如内网/VPN)下执行,否则 `intelligent-cwoscomponent``cw-elevator-application-service` 等模块会因 **父 POM / 传递依赖无法解析** 而失败。
## 3. 推荐编译顺序(依赖链)
在仓库根下按顺序 **install**(或至少 **compile** 前序模块并 install 到本地仓库;若使用自定义 `settings.xml``localRepository`,构件会写入该路径):
1. **`maven-cloudwalk-device-sdk`**`mvn -DskipTests clean install` — 提供 **`cn.cloudwalk:cloudwalk-device-sdk:2.2.0`** 父 POM 与 **`cloudwalk-device-sdk-protocol-entity`**(替代私服缺失父工程)。
2. **`maven-cloudwalk-legacy-public`**`mvn -DskipTests clean install` — 自 **`反1/*.jar.src.zip`** 提供 **`cloudwalk-cloud-common:3.7.2-Brussels-SRX`**、**`cloudwalk-common-result` / `web` / `serial`**、**`cwos-sdk-event:1.5.0-SNAPSHOT`**、**`cloudwalk-intelligent-component-lock:1.1.1-SNAPSHOT`**(闭合 **`cloudwalk.legacy.public.version`**、**`cwos.sdk.event`**、电梯 **lock** 等;**须在 `maven-cloudwalk-cloud` 之前**安装,以便 **`cloudwalk-common-event`** 解析 **`cwos-sdk-event`**)。
3. **`maven-cloudwalk-device-manager`**`mvn -DskipTests clean install` — 自 **`反1/cloudwalk-device-manager-*-2.0.2.jar.src.zip`** 提供 **`cn.cloudwalk.cloud:cloudwalk-device-manager:2.0.2`** 父 POM 与 **`cloudwalk-device-manager-common`**、**`cloudwalk-device-manager-interface`**(依赖第 2 步的 **`cloudwalk-common-result`****须在依赖其 interface 的其它工程之前**安装)。
4. **`maven-cwos-resource`**`mvn -DskipTests clean install` — 提供 **`cwos-component-resource`**、**`cwos-portal`** 父 POM 及 **`cwos-java-sdk-resource`** 等(替代私服缺失的 CWOS 资源/门户父链)。
5. **`maven-cloudwalk-intelligent-davinci-manager`**`mvn -DskipTests clean install` — 提供 **`cn.cloudwalk.intelligent:cloudwalk-intelligent-davinci-manager:1.1.7-SNAPSHOT`** 父 POM 与 **`davinci-manager-common`**、**`davinci-manager-storage`**(替代私服缺失的 Davinci 父链;与电梯 **`davinci.manager.storage.version`** 对齐)。
6. **`maven-cloudwalk-cloud`**`mvn -DskipTests clean install` — 提供 **`cloudwalk-common-event`**、**`cloudwalk-common-service`** 等(**`maven-cwos-device-authentication`** 依赖 **`cloudwalk-common-service`**,故 **aks / device-authentication 须排在本步之后**)。
7. **`maven-cwos-common-aks`**`mvn -DskipTests clean install` — 自 **`反1/cwos-common-aks-interface-1.0.0-SNAPSHOT.jar.src.zip`** 提供 **`cn.cloudwalk.cloud:cwos-common-aks:1.0.0-SNAPSHOT`** 与 **`cwos-common-aks-interface`**(依赖第 2 步 **`cloudwalk-common-result`**)。
8. **`maven-cwos-device-authentication`**`mvn -DskipTests clean install` — 自 **`反1/cwos-device-authentication-interface-1.0.0-SNAPSHOT.jar.src.zip`** 提供 **`cn.cloudwalk.cloud:cwos-device-authentication:1.0.0-SNAPSHOT`** 与 **`cwos-device-authentication-interface`**(依赖第 1、3、6、7 步及 **`cwos-common-aks-interface`**)。
9. **`maven-intelligent-cwoscomponent`**:若需维护 **3.0.0-xinghewan** 源码线:`mvn -DskipTests clean install`(依赖第 1 步的 **protocol-entity** 与 cloudwalk 模块)。**仅编电梯**且上线口径为 **`intelligent-cwoscomponent` 2.9.2`cw_lib`)** 时,**不要**依赖本步;请使用 `maven-cw-elevator-application/scripts/build_nexus_only.sh`(从 **`cw_lib`** 安装 2.9.2 JAR+POM + 父 POM 桩)。
10. **`maven-cw-elevator-application`**`mvn -DskipTests clean install`(或用 **`build_nexus_only.sh`** 隔离本地库 + Nexus`service` 若仍失败,多为其它私服构件或业务源码问题,见下文)
11. 其余:`maven-ninca-crk``maven-ninca-qk-alarm` 按需单独编译。
单工程示例:
```bash
cd maven-cloudwalk-device-sdk && mvn -DskipTests clean install
cd ../maven-cloudwalk-legacy-public && mvn -DskipTests clean install
cd ../maven-cloudwalk-device-manager && mvn -DskipTests clean install
cd ../maven-cwos-resource && mvn -DskipTests clean install
cd ../maven-cloudwalk-intelligent-davinci-manager && mvn -DskipTests clean install
cd ../maven-cloudwalk-cloud && mvn -DskipTests clean install
cd ../maven-cwos-common-aks && mvn -DskipTests clean install
cd ../maven-cwos-device-authentication && mvn -DskipTests clean install
cd ../maven-intelligent-cwoscomponent && mvn -DskipTests clean install
cd ../maven-cw-elevator-application && mvn -DskipTests clean compile
```
**说明**`maven-cwos-resource`**`cwos-portal-interface`** 已按 **`cwos-java-sdk-resource`** 实际引用面裁剪(仅保留 `common`/`enterprise`/`user` 等与 SDK 相关的包),并含 **`cwos-device-pkg-stub`** 占位 **`DeviceUpgradeResult`**;与线上一致「全量 portal 接口」不等价,仅用于 **本地编译闭合**
**与 `cw_lib` 的 outer 类对照**:可用仓库根目录下 **`scripts/compare_jar_to_sources.py`**(参数为 **`cw-elevator-application-V1.0.0.20211103/cw_lib` 中某 `.jar` 的绝对路径** + **对应 `maven-*` 子模块目录**),快速检查 JAR 内每个 outer 类是否在源码树中有同名 `.java`**`cwos-portal-interface`** 因裁剪会出现大量「缺失」,属预期。**`package-info.java`** 可能报告为「多出的源码」,一般可忽略。
### `cw_lib` 审核结论摘要(outer 类级,相对 `cw-elevator-application-V1.0.0.20211103/cw_lib`
| 类型 | 模块 / 构件 | 结论 | 原因说明 |
|------|----------------|------|----------|
| **JAR 有类、本地缺 outer `.java`** | 除 **`cwos-portal-interface`** 外,与 `cw_lib` 成对映射的 **`maven-*` 子模块** | **未发现** | 已用脚本对 `cw_lib` 内各业务/公共 JAR 全量扫描;**仅** portal 因裁剪出现大量「缺失」。 |
| **JAR 有类、本地缺 outer `.java`** | **`maven-cwos-resource/cwos-portal-interface`** | **约 438 个 outer 类无对应 `.java`** | **有意裁剪**:仅保留 **`cwos-java-sdk-resource`** 实际引用到的包,与 **`cw_lib` 全量 `cwos-portal-interface`** 不对等;非反编译丢文件。 |
| **本地有业务类型、对应 JAR 无 outer 类** | **`cw-elevator-application-data`**`TenantVisitorFloorPolicyDao` / `Dto` / `DaoImpl` / `Mapper` | **4 个类型仅存在于本地** | **`cw_lib``cw-elevator-application-data` / `service` JAR 均无 `TenantVisitor` 相关 `.class`**;与运行包相比,当前 Maven 源码含 **租户访客默认楼层策略** 增量(见 [租户访客默认楼层-数据库阶段变更记录.md](../business/租户访客默认楼层-数据库阶段变更记录.md)),属**业务演进**,不是「从 JAR 反编译漏解压」。 |
| **本地多 `package-info.java`** | 若干模块 | 可忽略 | JAR 未必含 `package-info.class`,脚本会将 `package-info` 记为「多出」。 |
| **占位桩** | **`cwos-device-pkg-stub`** | 无同名「全量」于 `cw_lib` | 仅为 **`DeviceUpgradeResult`** 等编译占位,与 portal 裁剪配套。 |
| **无 `src/main/java`(非缺陷)** | **`maven-cloudwalk-cloud/cloudwalk-cloud-common`****`4.0.0-Brussels-SRX`**)与 **`maven-cloudwalk-legacy-public/cloudwalk-cloud-common`****`3.7.2-Brussels-SRX`** | **目录下仅有 `pom.xml``packaging=pom`** | **`cloudwalk-cloud-common` 在上游即为 BOM/聚合父 POM**,不提供带 `.class` 的业务 JAR**`cw_lib` 中也不存在 `cloudwalk-cloud-common-*.jar`**,只有各子构件(如 **`cloudwalk-common-result`**)的 `pom` 把 parent 指向该坐标。工作区维护 **两套版本****3.7.2**(与 **`反1`** / 历史 JAR 的 parent 一致)与 **4.0.0 stub**(与电梯等 **`cloudwalk.internal.version`** 对齐),**勿混用**。详见 [Maven聚合工程说明](../architecture/Maven聚合工程说明.md)(「为何存在 `cloudwalk-cloud-common` 子模块」及 **§3.x** 中 3.7.2 / 4.0.0 说明)。 |
**说明**:outer 类级对照**不能**发现「同一类内方法体与线上一致」;若需核对 **service** 内既有类(如 **`PersonRuleServiceImpl`**)与 `cw_lib` 字节码是否一致,应对该类单独做反编译 diff 或回归测试。
### `maven-*` 子模块走查:无 `src/main/java`(属正常,非「缺解压」)
以下路径**仅有父 `pom.xml`、无 Java 源码目录**`packaging`**`pom`**,用于 **BOM / 聚合 / 占位**,与私服中「只发 POM、不发 JAR」的构件一致;**勿**当作反编译漏文件去 **`反1`** 补同名 `src`
| 路径 | 作用简述 |
|------|----------|
| **`maven-cloudwalk-cloud/cloudwalk-cloud-common`** | **`4.0.0`** 父坐标桩,见上文审核表。 |
| **`maven-cloudwalk-legacy-public/cloudwalk-cloud-common`** | **`3.7.2`** 父 POM,承接 **`cloudwalk-common-result` / `web` / `serial`**。 |
| **`maven-cwos-resource/cwos-component-resource`** | **`cwos-component-resource`** 聚合父。 |
| **`maven-cwos-resource/cwos-portal`** | **`cwos-portal`** 聚合父。 |
| **`maven-intelligent-cwoscomponent/intelligent-cwoscomponent-parent`** | intelligent 组件父 POM。 |
| 各 **`maven-*/pom.xml` 反应堆根** | 仅 `pom` 聚合,无 `src`。 |
### 反编译(JD-Core)遗留批量排除
大量 **`反1`** 解压的 `.java`**行首 `/* */` / `/* N */`** 及文件尾部 **`/* Location: ... * JD-Core Version: ... */`**。已提供脚本在 **`maven-*`** 树内批量剔除(**不改**业务逻辑,仅删注释噪声;**`artifacts/decompiled/`** 下归档树默认不处理,除非显式传入路径参数):
```bash
cd /path/to/反编译
# 先预览将改动的文件数
python3 scripts/strip_jdcore_java_noise.py --dry-run
# 实际写回(默认处理仓库根下全部 maven-* 目录)
python3 scripts/strip_jdcore_java_noise.py
```
写回后建议对常用反应堆执行 **`mvn -DskipTests clean compile`** 做抽样验证。
## 4. 版本与私服坐标说明
- **`cloudwalk.internal.version`(如 4.0.0-Brussels-SRX**:表示本仓库 **`cloudwalk-common-event` / `cloudwalk-common-service`** 等**已迁入源码**构件的版本。
- **`cloudwalk.legacy.public.version`(固定 3.7.2-Brussels-SRX**:表示**未迁入本仓库**、仍只能从私服获取的 **`cloudwalk-common-result` / `cloudwalk-common-web` / `cloudwalk-common-serial`** 等历史 GAV,**勿与反应堆主版本混用**,否则 Nexus 上无对应版本会导致解析失败。
详见 [Maven工作区子工程版本一览](../architecture/Maven工作区子工程版本一览.md)。
## 5. 本机验证结果(参考)
| 模块 | 说明 |
|------|------|
| `maven-cloudwalk-cloud` | 在可访问 Nexus 时,`mvn clean install` 可通过。 |
| `maven-cw-elevator-application`**common / data** | 已补齐 `spring-web``CollectionUtils` 与部分 DTO 反编译错误后,`mvn clean compile` 可编过至 **data** 模块。 |
| `cw-elevator-application-service` | **`cwos-*-resource` / `cwos-portal`** 父链可由 **`maven-cwos-resource`** 本地 install 解决;**`davinci-manager-storage`** 由 **`maven-cloudwalk-intelligent-davinci-manager`****`cloudwalk-common-result`/`web`/`serial``cwos-sdk-event``cloudwalk-intelligent-component-lock`** 由 **`maven-cloudwalk-legacy-public`****`反1`** zip);若仍失败,多为 **其它私服构件****业务源码**(如反编译残留语法错误)。 |
若仅修改电梯 **data/service 内业务代码**,可在完整依赖环境执行:
```bash
cd maven-cw-elevator-application
mvn -pl cw-elevator-application-service -am -DskipTests clean compile
```
---
## 6. 编译日志排查(典型失败链)
以下与一次真实日志一致:`cloudwalk-cloud` 成功 → `intelligent-cwoscomponent-interface` 失败 → 电梯 **common/data** 成功 → **service** 失败。
### 6.1 第一层失败:`intelligent-cwoscomponent-interface`
| 现象 | 含义 |
|------|------|
| `Failed to read artifact descriptor for ... cloudwalk-device-sdk-protocol-entity:jar:2.2.0` | 解析该 JAR 的 **有效 POM** 时失败。 |
| `cloudwalk-device-sdk:pom:2.2.0 (absent) was not found in ... maven-public` | 私服 **没有****路径不对**:父构件 **`cn.cloudwalk:cloudwalk-device-sdk:2.2.0`**packaging `pom`)未发布到当前使用的 `repository/maven-public`。 |
| `This failure was cached in the local repository` | Maven 已把「解析失败」缓存在本地(`~/.m2` 或你配置的 **`localRepository`**,如日志中的 `/data/local/repo`),在 **update 间隔** 内会**不再重试**,表现为持续失败。 |
**处理建议**(择一或组合):
1. 在 Nexus 补齐 **`cn.cloudwalk:cloudwalk-device-sdk:2.2.0`**(含 `protocol-entity` 子模块坐标),或改用团队约定的 **其他仓库**`settings.xml` 里增加 `mirror`/`repository`)。
2. 强制刷新缓存后重编:
`mvn -U -DskipTests clean install``-U``--update-snapshots`,并促使重新检查 release 元数据)。
3. 若确认私服已修好,可删除本地缓存目录后再编(路径示例,按坐标替换):
`rm -rf ~/.m2/repository/cn/cloudwalk/cloudwalk-device-sdk`
`localRepository``/data/local/repo`,则同样删除其下 `cn/cloudwalk/cloudwalk-device-sdk`
`intelligent-cwoscomponent-interface` 直接依赖见:
```29:32:maven-intelligent-cwoscomponent/intelligent-cwoscomponent-interface/pom.xml
<dependency>
<groupId>cn.cloudwalk</groupId>
<artifactId>cloudwalk-device-sdk-protocol-entity</artifactId>
</dependency>
```
(版本由反应堆 `dependencyManagement` 中的 **`cloudwalk.device.sdk.version`** 指定。)
---
### 6.2 第二层失败:`cw-elevator-application-service`(依赖未装全时的连锁)
| 现象 | 含义 |
|------|------|
| `cwos-component-resource:pom:1.0.0-SNAPSHOT` absent | 接口包 **`cwos-component-resource-interface`** 所引用的 **父 POM** 未在私服。 |
| `cwos-portal:pom:1.0.0-SNAPSHOT` absent | 同上,**`cwos-portal-interface`** 的父工程未发布。 |
| `cloudwalk-intelligent-davinci-manager:pom:1.1.7-SNAPSHOT` absent | **`davinci-manager-storage`** 的父 POM 未在私服(或曾失败被缓存)。 |
| `The POM for ... intelligent-cwoscomponent-rest:jar:2.9.2-xinghewan is missing` | **interface/rest** 未写入本地仓库(未从 `cw_lib`/`build_nexus_only.sh` 安装,或 **6.1** 仍失败),电梯解析 `intelligent-cwoscomponent-rest` 时只能报「无 POM/无依赖信息」。
**结论**`service` 的失败 **不是** 电梯业务源码语法问题,而是 **Maven 依赖图不完整**(私服缺件 + 上一步 intelligent 未成功)。
**处理建议**:先解决 **6.1** 并执行 `maven-intelligent-cwoscomponent` 全量 `install` 成功;对 **cwos / davinci** 父链优先在本仓库执行 **`maven-cwos-resource`**、**`maven-cloudwalk-intelligent-davinci-manager`** 的 `install`;其余缺失再在 Nexus 补齐,或对构件执行 **`mvn install:install-file`** 安装到本地/私服。
---
### 6.3 警告(非本次失败主因,可后续治理)
| 日志 | 说明 |
|------|------|
| `cloudwalk-common-web:jar:3.7.2-Brussels-SRX is invalid` … `cloudwalk-common-result` / `jsoup` **version is missing** | 私服上该 JAR 内嵌的 **POM 不完整**,Maven 构建「有效模型」时告警;**传递依赖可能不完整**。当前 **common/data** 已通过,但若运行期缺类,需在电梯反应堆 **`dependencyManagement`** 中显式补 `jsoup` 等版本。 |
| 同上对 **`cloudwalk-common-serial`** 的 invalid 警告 | 同上,多为历史发布物 POM 质量问题。 |
---
### 6.4 推荐复现命令(修私服 / 清缓存后)
```bash
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
cd maven-cloudwalk-cloud && mvn -U -DskipTests clean install
cd ../maven-intelligent-cwoscomponent && mvn -U -DskipTests clean install
cd ../maven-cw-elevator-application && mvn -U -DskipTests clean install
```
---
*随 POM 与私服策略变更请更新本文。*