Files
starRiverProperty/docs/superpowers/data/2026-05-06-component-org-deploy-vs-source-batch-diff-and-javap.md
hpd840321 7b2bd307f1 Initial commit: reorganized source tree
- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.)
- frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts
- scripts/: build, test-env, tools (Docker Compose, service templates, API parity)
- docs/: AGENTS.md, superpowers specs, architecture docs
- .gitignore: standard Java/Maven exclusions

Moved from legacy maven-*/ root layout to backend/ organized structure.
2026-05-09 09:56:45 +08:00

137 lines
9.1 KiB
Markdown
Raw Permalink 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.
# 组织组件:部署包 vs 源码批量对比与 javap 单类语义对照
> **已 supersede** 全量 `**src/main/java`582 文件)** 逐类 `javap` 核对、清单与解决方案见
> `[2026-05-06-component-org-full-java-audit-and-remediation.md](./2026-05-06-component-org-full-java-audit-and-remediation.md)`
> 及 `maven-ninca-common-component-organization/tools/out/deploy_javap_audit_main.json`。
**日期:** 2026-05-06
**部署包根路径:** `星河湾星中星/部署包/ninca_common_component_organization_01-ninca_common_component_organization`
**源码反应堆:** `源码/maven-ninca-common-component-organization`
**本地构建:** `mvn -DskipTests package`(对比时使用各模块 `target/*.jar` 与 Starter Fat JAR
---
## 1. 批量对比摘要(Lua / 配置 / JAR)
| 类别 | 结论 |
| ------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Lua**`service/.../lua` ↔ 部署 `BOOT-INF/classes/lua` | `diff -rq` 无差异,9 个脚本一致。 |
| **配置** | 根目录 `application.properties``BOOT-INF/classes` 仍有多层覆盖差异;根目录存在无效行 `新增配置`(应改为 `#` 注释)。`generator*.xml` 仅在现场包内,仓库无同名 `src/main/resources`。 |
| **四模块 JAR** | 与部署 `BOOT-INF/lib``*-v2.9.2_xinghewan.jar` 逐 entry SHA-256 比对:**绝大多数 `.class` 哈希不同**;另见接口 JAR 多 `component-org/messages*.properties`Data JAR 多 `mapper/mysql/*.xml` 而仓库 data 模块未提交对应 XML。 |
| **Starter** | 现场 `BOOT-INF/classes` 含大量 config/kafka 等 `**.class`**;仓库 `starter``**OrganizationServer.java**`,编译产物几乎只有 `**OrganizationServer.class**`。 |
| **Fat JAR** | 现场 `...20210730.jar`(约 116MB)与本地 `ninca-common-component-organization-2.9.2-xinghewan.jar`(约 96MB**SHA-256 不同**,依赖与打包体积不一致。 |
---
## 2. javap 对照方法
- **命令:** `javap -p -classpath <jar 或 classes 目录> <全限定类名>`
- **含义:** 打印编译期可见的类签名、字段、方法(含 private),用于 **API 形状** 对照;**不**等价于字节码逐条指令一致(需 `javap -c``javap -v`)。
- **部署侧类路径:** 优先从解压目录 `.../BOOT-INF/classes` 加载(如 `OrganizationServer`);其余类从现场四模块 JAR 组成的 classpath 加载。
- **本地侧:** Starter 类从 `cwos-component-organization-starter/target/classes`;其余从本地四模块 `target/*.jar`
---
## 3. 抽样类:javap 是否一致
| 类 | javap`-p`)结果 |
| ----------------------------------------------------------------------- | ------------------------------- |
| `cn.cloudwalk.starter.organization.OrganizationServer` | **不一致**(见下节) |
| `cn.cloudwalk.web.organization.controller.PersonController` | **完全一致** |
| `cn.cloudwalk.web.organization.controller.CpOrgDeviceKitController` | **完全一致** |
| `cn.cloudwalk.service.organization.service.ImgPersonServiceImpl` | **不一致**(见下节) |
| `cn.cloudwalk.service.organization.service.CpImageStoreToolServiceImpl` | **不一致**(见下节;差异仅在合成 lambda 方法签名) |
---
## 4. 差异详情:`diff -u`javap 输出)
### 4.1 `OrganizationServer`
现场类继承 `SpringBootServletInitializer` 并实现 `WebApplicationInitializer`,且含 `RestTemplate``MeterRegistryCustomizer``configure(SpringApplicationBuilder)` 等;本地类为 **普通类**,仅 `main``**cloudwalkSessionContextHolder()`** Bean 方法,**无 WAR 引导与 Micrometer 相关成员**。
```diff
--- deploy javap
+++ local javap
@@ -1,12 +1,6 @@
Compiled from "OrganizationServer.java"
-public class cn.cloudwalk.starter.organization.OrganizationServer extends org.springframework.boot.web.support.SpringBootServletInitializer implements org.springframework.web.WebApplicationInitializer {
- private static org.slf4j.Logger log;
- org.springframework.data.redis.core.StringRedisTemplate stringRedisTemplate;
+public class cn.cloudwalk.starter.organization.OrganizationServer {
public cn.cloudwalk.starter.organization.OrganizationServer();
+ public cn.cloudwalk.cloud.context.CloudwalkSessionContextHolder cloudwalkSessionContextHolder();
public static void main(java.lang.String[]);
- org.springframework.web.client.RestTemplate restTemplate();
- public org.springframework.web.client.RestTemplate getWebClient();
- io.micrometer.spring.autoconfigure.MeterRegistryCustomizer<io.micrometer.core.instrument.MeterRegistry> configurer(java.lang.String);
- protected org.springframework.boot.builder.SpringApplicationBuilder configure(org.springframework.boot.builder.SpringApplicationBuilder);
- static {};
}
```
**解读:** 本地 Starter 与现场 **入口形态不一致**;若要以现场为准,需将完整 Starter 源码迁回仓库后再比对。
---
### 4.2 `ImgPersonServiceImpl`
本地相对现场 **多出** 租户访客楼层策略依赖与两个私有辅助方法(与仓库内访客楼层策略改造一致)。
```diff
--- deploy javap
+++ local javap
@@ -23,6 +23,7 @@
private org.springframework.context.MessageSource messageSource;
private cn.cloudwalk.service.organization.service.feign.ZoneFeignClient zoneFeignClient;
+ private cn.cloudwalk.service.organization.policy.TenantVisitorFloorPolicyService tenantVisitorFloorPolicyService;
@@ -56,6 +57,8 @@
public cn.cloudwalk.cloud.result.CloudwalkResult<java.lang.Boolean> syncAccountUnbind(...);
+ private java.lang.String buildCommaSeparatedFloorNames(java.lang.String, java.util.List<java.lang.String>);
+ private java.util.List<cn.cloudwalk.client.organization.result.AcsPassRuleImageResultDto> buildFloorInfoListFromOrderedZoneIds(java.lang.String, java.util.List<java.lang.String>);
private void saveSysLog(...);
```
**解读:** **源码侧领先于现场 JAR**(功能扩展);非「仅编译器噪声」。
---
### 4.3 `CpImageStoreToolServiceImpl`
差异仅体现在 **lambda 合成方法** `lambda$batchRemoveFace$5` 的参数列表(少一个 `BatchRemoveFaceParam`)。公开 API 未在上面的片段中变化,通常与 **同一源码重新编译后 lambda 编号/捕获变量** 有关,需结合 `-c` 或业务测试确认行为是否等价。
```diff
--- deploy javap
+++ local javap
@@ -36,7 +36,7 @@
- private static void lambda$batchRemoveFace$5(cn.cloudwalk.client.organization.param.BatchRemoveFaceParam, cn.cloudwalk.client.organization.service.store.param.CpBatchHandleFaceParam, java.util.List, java.lang.String);
+ private static void lambda$batchRemoveFace$5(cn.cloudwalk.client.organization.service.store.param.CpBatchHandleFaceParam, java.util.List, java.lang.String);
```
---
## 5. 结论与建议
1. **PersonController / CpOrgDeviceKitController****方法签名层面** 与现场一致,与「几乎全部 class 文件哈希不同」并存时,说明 **大量差异来自编译环境或调试信息**,而非必然的业务接口变更。
2. **OrganizationServer** 与现场 **语义层面不一致**,与仓库 Starter 仅保留最小入口一致,属 **结构性缺口**
3. **ImgPersonServiceImpl** 差异反映 **源码已增加租户访客楼层策略**,现场包未包含时需 **升级发布** 才能对齐。
4. 后续若要扩大 javap 覆盖面:可对 **变更集中的 Service** 再跑同一脚本;若需 **指令级** 一致,对关键方法追加 `javap -c` 对比。
---
## 6. 复现命令(节选)
```bash
DEPLOY_LIB=".../ninca-common-component-organization-V2.9.2_20210730/BOOT-INF/lib"
D_CP="$DEPLOY_LIB/cwos-component-organization-web-v2.9.2_xinghewan.jar:..."
DEPLOY_CLS=".../BOOT-INF/classes"
L_CP=".../cwos-component-organization-web/target/...jar:..."
javap -p -classpath "$DEPLOY_CLS" cn.cloudwalk.starter.organization.OrganizationServer
javap -p -classpath ".../cwos-component-organization-starter/target/classes" cn.cloudwalk.starter.organization.OrganizationServer
```
(将 `...` 替换为本机完整路径。)