Files
starRiverProperty/docs/superpowers/data/2026-05-06-component-org-deploy-vs-source-batch-diff-and-javap.md
T
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

9.1 KiB
Raw Blame History

组织组件:部署包 vs 源码批量对比与 javap 单类语义对照

已 supersede 全量 **src/main/java582 文件)** 逐类 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)

类别 结论
Luaservice/.../lua ↔ 部署 BOOT-INF/classes/lua diff -rq 无差异,9 个脚本一致。
配置 根目录 application.propertiesBOOT-INF/classes 仍有多层覆盖差异;根目录存在无效行 新增配置(应改为 # 注释)。generator*.xml 仅在现场包内,仓库无同名 src/main/resources
四模块 JAR 与部署 BOOT-INF/lib*-v2.9.2_xinghewan.jar 逐 entry SHA-256 比对:绝大多数 .class 哈希不同;另见接口 JAR 多 component-org/messages*.propertiesData 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(约 96MBSHA-256 不同,依赖与打包体积不一致。

2. javap 对照方法

  • 命令: javap -p -classpath <jar 或 classes 目录> <全限定类名>
  • 含义: 打印编译期可见的类签名、字段、方法(含 private),用于 API 形状 对照;等价于字节码逐条指令一致(需 javap -cjavap -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 -ujavap 输出)

4.1 OrganizationServer

现场类继承 SpringBootServletInitializer 并实现 WebApplicationInitializer,且含 RestTemplateMeterRegistryCustomizerconfigure(SpringApplicationBuilder) 等;本地类为 普通类,仅 main**cloudwalkSessionContextHolder()** Bean 方法,无 WAR 引导与 Micrometer 相关成员

--- 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

本地相对现场 多出 租户访客楼层策略依赖与两个私有辅助方法(与仓库内访客楼层策略改造一致)。

--- 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 或业务测试确认行为是否等价。

--- 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. 复现命令(节选)

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

(将 ... 替换为本机完整路径。)