# DIFFERENT(剩余):逐类 `javap -p` 核对(现场 JAR vs 本仓库 `target/classes`) **日期:** 2026-05-06(**2026-05-06 更新**:OpenCvUtils + 三工具类已与现场 **IDENTICAL**,DIFFERENT **18**) **依据:** `maven-ninca-common-component-organization/tools/out/deploy_javap_audit_main.json` 中 `status == "DIFFERENT"` **证据文件:** `tools/out/different-22-javap/`(历史批量 diff);复跑审计后以 **`deploy_javap_audit_main.json`** 为准 **现场 classpath:** `ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/classes` + 四模块 `*-v2.9.2_xinghewan.jar` **本地 classpath:** `interface` / `data` / `service` / `web` / `starter` 的 `target/classes`(与 `deploy_javap_audit.py` 一致) --- ## 1. 总览:差异类型与处置 | 类型 | 含义 | 本批数量(约) | | ------------------------------ | ---------------------------------------------------------------------------------- | ------------------ | | **A. 仅 synthetic / lambda 形变** | 无 `public`/`protected` 方法签名的变化,差异集中在 `lambda$…`、`null$` 或具体化类型(`List`→`ArrayList`) | 多数 | | **B. 小范围 API 面变化** | 主要为 **`ChannelFileReader` 声明 `AutoCloseable`**(工具类构造已与现场对齐) | **1** | | **C. 明确业务增强** | 新增**字段/私有方法**或组织 `detail` 等实现路径增加分支 | 2+ | | **D. 与现场能力严重偏离** | 公开方法集合与现场**不等价** | **已处理(OpenCvUtils 已与现场 IDENTICAL)** | **说明:** 已与现场 **IDENTICAL** 的曾有 DIFFERENT 项:**`OpenCvUtils`**(与 `jar.src`/`javap` 对齐)、**`ImageUtil`/`ToolUtil`/`ImageEditUtils`**(补 **private** 无参构造,与部署 service JAR 一致)。**仍 DIFFERENT** 共 **18** 类(多为 synthetic/lambda 或业务超前)。 --- ## 2. 逐类表(剩余 DIFFERENT:**18**;已收敛项见 §2.1) ### 2.1 已从 DIFFERENT 收敛(供追溯) | FQN | 处置 | | --- | --- | | `OpenCvUtils` | 与现场 **service JAR + `jar.src`** 对齐,`javap -p` **IDENTICAL** | | `ImageUtil`、`ToolUtil`、`ImageEditUtils` | 增加 **`private Xxx() {}`**,与部署 **private 无参构造**一致,`javap` **IDENTICAL** | ### 2.2 仍为 DIFFERENT(简表) | # | FQN | 差异要点(见对应 `diff-*.patch`) | 分类 | 建议 | | --- | ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- | ----- | ----------------------------------------------------------------------- | | 1 | `…common.AbstractImagStoreService` | `lambda$distinctByKey$0` 首参 `Set` → `ConcurrentHashMap$KeySetView` | A | 视为编译器/具体化差异;**行为以方法体为准**(可抽查 `javap -c`) | | 2 | `…common.JsonUtils` | `lambda$toStrList$1` 中 `List` → `ArrayList` | A | 无 public 变化 | | 3 | `…common.OkhttpUtil` | 新增 `lambda$postJson$1(…)` | A | `postJson` 重载实现略调;**确认与 HTTP 头/体一致**后接受 | | 4 | `…config.ChannelFileReader` | 本地 **`implements AutoCloseable`**(`javap` 首行与现场不同);现场仍有 `close()` | B | **`CommonAppExportExecuteTask` 使用 try-with-resources**,保留 AutoCloseable;接受与现场 **javap 字符串**不一致或与现场合并策略 | | 5 | `…service.CertRegistryHandler` | `lambda$null$4/5` 形参列表简化(Optional/交叉类型 → 单类型) | A | 典型 Stream/Optional 链改写;**公开方法未变** | | 6 | `…CpDeviceImagePersonServiceImpl` | `personPassRule` 相关 lambda 合并/删减 | A | public 段一致;属实现整理 | | 7 | `…CpImageStorePersonManager` | 多组 `lambda$null$`* 删除,编号下移 | A | 同上 | | 8 | `…CpImageStorePersonSynManager` | Redis 回调 lambda 返回类型 `Long` → `Object` | A | JDK8 `RedisConnection` 泛型与 lambda **桥接**常见现象 | | 9 | `…CpImageStorePersonValidateManager` | 大量 `lambda$`* 重排、嵌套 lambda 命名变化 | A | **patch 行数最大**,仍以 synthetic 为主;**建议用业务用例回归**(校验任务、延期校验) | | 10 | `…CpImageStoreServiceImpl` | `packageCpResult`/`packageImageStoreResult`/`getAssociated` 等 lambda 编号与具体类型 | A | public 未变 | | 11 | `…CpImageStoreToolServiceImpl` | `lambda$batchRemoveFace$5` 少一参(去掉 `BatchRemoveFaceParam`) | A | **对外接口未变**;实现层闭包捕获范围变化 | | 12 | `…DeviceGroupRefChangeEventHandler` | `HashSet` vs `Set` 于一处 lambda | A | 无 public 变化 | | 13 | `…DevicePersonSyncManager` | `lambda$null$2` 形参类型变化 | A | 无 public 变化 | | 14 | `…DevicePersonSyncServiceImpl` | 删除两行 `deviceImageStoreMap` 相关 lambda | A | public 未变 | | 15 | `…ImgPersonServiceImpl` | **新增字段** `tenantVisitorFloorPolicyService`;**新增私有方法** `buildCommaSeparatedFloorNames`、`buildFloorInfoListFromOrderedZoneIds` | **C** | **星河湾租户访客楼层增强**;发版说明与联调必测 | | 16 | `…OrganizationServiceImpl` | `detail`/`listNames`/`saveAreaDetails` 路径下 **lambda 数量与编号**变化(增加 `ZoneUnitResultDTO` 等参与) | A/C | **`javap` 前半段 public 方法与现场一致**;若产品关心 **detail 返回中区域/楼层展示**,做专项对比测试 | | 17 | `…starter.task.ComponentTaskInitialize` | 现场多 `lambda$run$0(String)`,本地无 | A | 与 **定时/初始化路径**实现差异一致(如去掉一处 stream);启动后看日志与任务是否注册 | | 18 | `…controller.DevicePersonSyncController` | `devicePersonResync`/`detail` 的 lambda 个数与参数类型 | A | **三个 public API 未变**;可做 elevator API 对拍 | --- ## 3. 与《全量审计》§4 的关系 - **OpenCvUtils** 已与现场 **`javap` IDENTICAL**(见 §2.1)。 - **ImgPersonServiceImpl(表 2.2 #15)** 为**已知的仓库超前能力**,与 **MISSING_DEPLOY(租户策略等)** 配套部署后才能在现场 classpath 出现对应依赖类。 - 其余类以 **A 类**为主:**契约测试**(接口级)可通过;**集成回归**仍建议覆盖图库同步、设备同步、组织详情。 --- ## 4. 复现核对命令(可选) ```bash export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 export PATH="$JAVA_HOME/bin:$PATH" # 设置 D_CP / L_CP 同本文档前言,然后: javap -p -classpath "$D_CP" cn.cloudwalk.service.organization.common.OpenCvUtils > /tmp/deploy.txt javap -p -classpath "$L_CP" cn.cloudwalk.service.organization.common.OpenCvUtils > /tmp/local.txt diff -u /tmp/deploy.txt /tmp/local.txt ``` 批量产物已由流水线写入:`tools/out/different-22-javap/diff-.patch`。 --- **关联:** `[2026-05-06-component-org-full-java-audit-and-remediation.md](./2026-05-06-component-org-full-java-audit-and-remediation.md)` §4(DIFFERENT 分类说明)