mirror of
https://github.com/hpd840321/starRiverProperty.git
synced 2026-06-09 16:30:29 +08:00
7b2bd307f1
- 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.
137 lines
9.1 KiB
Markdown
137 lines
9.1 KiB
Markdown
# 组织组件:部署包 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
|
||
```
|
||
|
||
(将 `...` 替换为本机完整路径。) |