- 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.
9.1 KiB
组织组件:部署包 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 相关成员。
--- 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. 结论与建议
- PersonController / CpOrgDeviceKitController 在 方法签名层面 与现场一致,与「几乎全部 class 文件哈希不同」并存时,说明 大量差异来自编译环境或调试信息,而非必然的业务接口变更。
- OrganizationServer 与现场 语义层面不一致,与仓库 Starter 仅保留最小入口一致,属 结构性缺口。
- ImgPersonServiceImpl 差异反映 源码已增加租户访客楼层策略,现场包未包含时需 升级发布 才能对齐。
- 后续若要扩大 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
(将 ... 替换为本机完整路径。)