Made-with: Cursor
16 KiB
本地编译说明(Maven 工作区)
1. 环境与 JVM
- Maven 进程 JVM:须为 JDK 8(与
maven-enforcer-plugin及各父 POMjava.version一致)。
示例(Linux):
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
java -version # 应显示 1.8.x
2. 私服与网络
- 各
pom.xml中默认 Nexus 为http://192.168.3.12/...(或带端口8081的maven-public)。 - 须在能访问该私服的网络环境(如内网/VPN)下执行,否则
intelligent-cwoscomponent、cw-elevator-application-service等模块会因 父 POM / 传递依赖无法解析 而失败。
3. 推荐编译顺序(依赖链)
在仓库根下按顺序 install(或至少 compile 前序模块并 install 到本地仓库;若使用自定义 settings.xml 的 localRepository,构件会写入该路径):
maven-cloudwalk-device-sdk:mvn -DskipTests clean install— 提供cn.cloudwalk:cloudwalk-device-sdk:2.2.0父 POM 与cloudwalk-device-sdk-protocol-entity(替代私服缺失父工程)。maven-cloudwalk-legacy-public:mvn -DskipTests clean install— 自反1/*.jar.src.zip提供cloudwalk-cloud-common:3.7.2-Brussels-SRX、cloudwalk-common-result/web/serial、cwos-sdk-event:1.5.0-SNAPSHOT、cloudwalk-intelligent-component-lock:1.1.1-SNAPSHOT(闭合cloudwalk.legacy.public.version、cwos.sdk.event、电梯 lock 等;须在maven-cloudwalk-cloud之前安装,以便cloudwalk-common-event解析cwos-sdk-event)。maven-cloudwalk-device-manager:mvn -DskipTests clean install— 自反1/cloudwalk-device-manager-*-2.0.2.jar.src.zip提供cn.cloudwalk.cloud:cloudwalk-device-manager:2.0.2父 POM 与cloudwalk-device-manager-common、cloudwalk-device-manager-interface(依赖第 2 步的cloudwalk-common-result;须在依赖其 interface 的其它工程之前安装)。maven-cwos-resource:mvn -DskipTests clean install— 提供cwos-component-resource、cwos-portal父 POM 及cwos-java-sdk-resource等(替代私服缺失的 CWOS 资源/门户父链)。maven-cloudwalk-intelligent-davinci-manager:mvn -DskipTests clean install— 提供cn.cloudwalk.intelligent:cloudwalk-intelligent-davinci-manager:1.1.7-SNAPSHOT父 POM 与davinci-manager-common、davinci-manager-storage(替代私服缺失的 Davinci 父链;与电梯davinci.manager.storage.version对齐)。maven-cloudwalk-cloud:mvn -DskipTests clean install— 提供cloudwalk-common-event、cloudwalk-common-service等(maven-cwos-device-authentication依赖cloudwalk-common-service,故 aks / device-authentication 须排在本步之后)。maven-cwos-common-aks:mvn -DskipTests clean install— 自反1/cwos-common-aks-interface-1.0.0-SNAPSHOT.jar.src.zip提供cn.cloudwalk.cloud:cwos-common-aks:1.0.0-SNAPSHOT与cwos-common-aks-interface(依赖第 2 步cloudwalk-common-result)。maven-cwos-device-authentication:mvn -DskipTests clean install— 自反1/cwos-device-authentication-interface-1.0.0-SNAPSHOT.jar.src.zip提供cn.cloudwalk.cloud:cwos-device-authentication:1.0.0-SNAPSHOT与cwos-device-authentication-interface(依赖第 1、3、6、7 步及cwos-common-aks-interface)。maven-intelligent-cwoscomponent:mvn -DskipTests clean install(依赖第 1 步的 protocol-entity 与 cloudwalk 模块)maven-cw-elevator-application:mvn -DskipTests clean install(service若仍失败,多为其它私服构件或业务源码问题,见下文)- 其余:
maven-ninca-crk、maven-ninca-qk-alarm按需单独编译。
单工程示例:
cd maven-cloudwalk-device-sdk && mvn -DskipTests clean install
cd ../maven-cloudwalk-legacy-public && mvn -DskipTests clean install
cd ../maven-cloudwalk-device-manager && mvn -DskipTests clean install
cd ../maven-cwos-resource && mvn -DskipTests clean install
cd ../maven-cloudwalk-intelligent-davinci-manager && mvn -DskipTests clean install
cd ../maven-cloudwalk-cloud && mvn -DskipTests clean install
cd ../maven-cwos-common-aks && mvn -DskipTests clean install
cd ../maven-cwos-device-authentication && mvn -DskipTests clean install
cd ../maven-intelligent-cwoscomponent && mvn -DskipTests clean install
cd ../maven-cw-elevator-application && mvn -DskipTests clean compile
说明:maven-cwos-resource 内 cwos-portal-interface 已按 cwos-java-sdk-resource 实际引用面裁剪(仅保留 common/enterprise/user 等与 SDK 相关的包),并含 cwos-device-pkg-stub 占位 DeviceUpgradeResult;与线上一致「全量 portal 接口」不等价,仅用于 本地编译闭合。
与 cw_lib 的 outer 类对照:可用仓库根目录下 scripts/compare_jar_to_sources.py(参数为 cw-elevator-application-V1.0.0.20211103/cw_lib 中某 .jar 的绝对路径 + 对应 maven-* 子模块目录),快速检查 JAR 内每个 outer 类是否在源码树中有同名 .java;cwos-portal-interface 因裁剪会出现大量「缺失」,属预期。package-info.java 可能报告为「多出的源码」,一般可忽略。
cw_lib 审核结论摘要(outer 类级,相对 cw-elevator-application-V1.0.0.20211103/cw_lib)
| 类型 | 模块 / 构件 | 结论 | 原因说明 |
|---|---|---|---|
JAR 有类、本地缺 outer .java |
除 cwos-portal-interface 外,与 cw_lib 成对映射的 maven-* 子模块 |
未发现 | 已用脚本对 cw_lib 内各业务/公共 JAR 全量扫描;仅 portal 因裁剪出现大量「缺失」。 |
JAR 有类、本地缺 outer .java |
maven-cwos-resource/cwos-portal-interface |
约 438 个 outer 类无对应 .java |
有意裁剪:仅保留 cwos-java-sdk-resource 实际引用到的包,与 cw_lib 全量 cwos-portal-interface 不对等;非反编译丢文件。 |
| 本地有业务类型、对应 JAR 无 outer 类 | cw-elevator-application-data:TenantVisitorFloorPolicyDao / Dto / DaoImpl / Mapper |
4 个类型仅存在于本地 | cw_lib 中 cw-elevator-application-data / service JAR 均无 TenantVisitor 相关 .class;与运行包相比,当前 Maven 源码含 租户访客默认楼层策略 增量(见 租户访客默认楼层-数据库阶段变更记录.md),属业务演进,不是「从 JAR 反编译漏解压」。 |
本地多 package-info.java |
若干模块 | 可忽略 | JAR 未必含 package-info.class,脚本会将 package-info 记为「多出」。 |
| 占位桩 | cwos-device-pkg-stub |
无同名「全量」于 cw_lib |
仅为 DeviceUpgradeResult 等编译占位,与 portal 裁剪配套。 |
无 src/main/java(非缺陷) |
maven-cloudwalk-cloud/cloudwalk-cloud-common(4.0.0-Brussels-SRX)与 maven-cloudwalk-legacy-public/cloudwalk-cloud-common(3.7.2-Brussels-SRX) |
目录下仅有 pom.xml,packaging=pom |
cloudwalk-cloud-common 在上游即为 BOM/聚合父 POM,不提供带 .class 的业务 JAR;cw_lib 中也不存在 cloudwalk-cloud-common-*.jar,只有各子构件(如 cloudwalk-common-result)的 pom 把 parent 指向该坐标。工作区维护 两套版本:3.7.2(与 反1 / 历史 JAR 的 parent 一致)与 4.0.0 stub(与电梯等 cloudwalk.internal.version 对齐),勿混用。详见 Maven聚合工程说明(「为何存在 cloudwalk-cloud-common 子模块」及 §3.x 中 3.7.2 / 4.0.0 说明)。 |
说明:outer 类级对照不能发现「同一类内方法体与线上一致」;若需核对 service 内既有类(如 PersonRuleServiceImpl)与 cw_lib 字节码是否一致,应对该类单独做反编译 diff 或回归测试。
maven-* 子模块走查:无 src/main/java(属正常,非「缺解压」)
以下路径仅有父 pom.xml、无 Java 源码目录,packaging 为 pom,用于 BOM / 聚合 / 占位,与私服中「只发 POM、不发 JAR」的构件一致;勿当作反编译漏文件去 反1 补同名 src。
| 路径 | 作用简述 |
|---|---|
maven-cloudwalk-cloud/cloudwalk-cloud-common |
4.0.0 父坐标桩,见上文审核表。 |
maven-cloudwalk-legacy-public/cloudwalk-cloud-common |
3.7.2 父 POM,承接 cloudwalk-common-result / web / serial。 |
maven-cwos-resource/cwos-component-resource |
cwos-component-resource 聚合父。 |
maven-cwos-resource/cwos-portal |
cwos-portal 聚合父。 |
maven-intelligent-cwoscomponent/intelligent-cwoscomponent-parent |
intelligent 组件父 POM。 |
各 maven-*/pom.xml 反应堆根 |
仅 pom 聚合,无 src。 |
反编译(JD-Core)遗留批量排除
大量 反1 解压的 .java 含 行首 /* */ / /* N */ 及文件尾部 /* Location: ... * JD-Core Version: ... */。已提供脚本在 maven-* 树内批量剔除(不改业务逻辑,仅删注释噪声;artifacts/decompiled/ 下归档树默认不处理,除非显式传入路径参数):
cd /path/to/反编译
# 先预览将改动的文件数
python3 scripts/strip_jdcore_java_noise.py --dry-run
# 实际写回(默认处理仓库根下全部 maven-* 目录)
python3 scripts/strip_jdcore_java_noise.py
写回后建议对常用反应堆执行 mvn -DskipTests clean compile 做抽样验证。
4. 版本与私服坐标说明
cloudwalk.internal.version(如 4.0.0-Brussels-SRX):表示本仓库cloudwalk-common-event/cloudwalk-common-service等已迁入源码构件的版本。cloudwalk.legacy.public.version(固定 3.7.2-Brussels-SRX):表示未迁入本仓库、仍只能从私服获取的cloudwalk-common-result/cloudwalk-common-web/cloudwalk-common-serial等历史 GAV,勿与反应堆主版本混用,否则 Nexus 上无对应版本会导致解析失败。
详见 Maven工作区子工程版本一览。
5. 本机验证结果(参考)
| 模块 | 说明 |
|---|---|
maven-cloudwalk-cloud |
在可访问 Nexus 时,mvn clean install 可通过。 |
maven-cw-elevator-application 之 common / data |
已补齐 spring-web、CollectionUtils 与部分 DTO 反编译错误后,mvn clean compile 可编过至 data 模块。 |
cw-elevator-application-service |
cwos-*-resource / cwos-portal 父链可由 maven-cwos-resource 本地 install 解决;davinci-manager-storage 由 maven-cloudwalk-intelligent-davinci-manager;cloudwalk-common-result/web/serial、cwos-sdk-event、cloudwalk-intelligent-component-lock 由 maven-cloudwalk-legacy-public(反1 zip);若仍失败,多为 其它私服构件 或 业务源码(如反编译残留语法错误)。 |
若仅修改电梯 data/service 内业务代码,可在完整依赖环境执行:
cd maven-cw-elevator-application
mvn -pl cw-elevator-application-service -am -DskipTests clean compile
6. 编译日志排查(典型失败链)
以下与一次真实日志一致:cloudwalk-cloud 成功 → intelligent-cwoscomponent-interface 失败 → 电梯 common/data 成功 → service 失败。
6.1 第一层失败:intelligent-cwoscomponent-interface
| 现象 | 含义 |
|---|---|
Failed to read artifact descriptor for ... cloudwalk-device-sdk-protocol-entity:jar:2.2.0 |
解析该 JAR 的 有效 POM 时失败。 |
cloudwalk-device-sdk:pom:2.2.0 (absent) was not found in ... maven-public |
私服 没有 或 路径不对:父构件 cn.cloudwalk:cloudwalk-device-sdk:2.2.0(packaging pom)未发布到当前使用的 repository/maven-public。 |
This failure was cached in the local repository |
Maven 已把「解析失败」缓存在本地(~/.m2 或你配置的 localRepository,如日志中的 /data/local/repo),在 update 间隔 内会不再重试,表现为持续失败。 |
处理建议(择一或组合):
- 在 Nexus 补齐
cn.cloudwalk:cloudwalk-device-sdk:2.2.0(含protocol-entity子模块坐标),或改用团队约定的 其他仓库(settings.xml里增加mirror/repository)。 - 强制刷新缓存后重编:
mvn -U -DskipTests clean install(-U即--update-snapshots,并促使重新检查 release 元数据)。 - 若确认私服已修好,可删除本地缓存目录后再编(路径示例,按坐标替换):
rm -rf ~/.m2/repository/cn/cloudwalk/cloudwalk-device-sdk
若localRepository为/data/local/repo,则同样删除其下cn/cloudwalk/cloudwalk-device-sdk。
intelligent-cwoscomponent-interface 直接依赖见:
<dependency>
<groupId>cn.cloudwalk</groupId>
<artifactId>cloudwalk-device-sdk-protocol-entity</artifactId>
</dependency>
(版本由反应堆 dependencyManagement 中的 cloudwalk.device.sdk.version 指定。)
6.2 第二层失败:cw-elevator-application-service(依赖未装全时的连锁)
| 现象 | 含义 |
|---|---|
cwos-component-resource:pom:1.0.0-SNAPSHOT absent |
接口包 cwos-component-resource-interface 所引用的 父 POM 未在私服。 |
cwos-portal:pom:1.0.0-SNAPSHOT absent |
同上,cwos-portal-interface 的父工程未发布。 |
cloudwalk-intelligent-davinci-manager:pom:1.1.7-SNAPSHOT absent |
davinci-manager-storage 的父 POM 未在私服(或曾失败被缓存)。 |
The POM for ... intelligent-cwoscomponent-rest:jar:3.0.0-xinghewan is missing |
因 6.1 失败,interface/rest 未 install 到本地仓库,电梯解析 intelligent-cwoscomponent-rest 时只能报「无 POM/无依赖信息」。 |
结论:service 的失败 不是 电梯业务源码语法问题,而是 Maven 依赖图不完整(私服缺件 + 上一步 intelligent 未成功)。
处理建议:先解决 6.1 并执行 maven-intelligent-cwoscomponent 全量 install 成功;对 cwos / davinci 父链优先在本仓库执行 maven-cwos-resource、maven-cloudwalk-intelligent-davinci-manager 的 install;其余缺失再在 Nexus 补齐,或对构件执行 mvn install:install-file 安装到本地/私服。
6.3 警告(非本次失败主因,可后续治理)
| 日志 | 说明 |
|---|---|
cloudwalk-common-web:jar:3.7.2-Brussels-SRX is invalid … cloudwalk-common-result / jsoup version is missing |
私服上该 JAR 内嵌的 POM 不完整,Maven 构建「有效模型」时告警;传递依赖可能不完整。当前 common/data 已通过,但若运行期缺类,需在电梯反应堆 dependencyManagement 中显式补 jsoup 等版本。 |
同上对 cloudwalk-common-serial 的 invalid 警告 |
同上,多为历史发布物 POM 质量问题。 |
6.4 推荐复现命令(修私服 / 清缓存后)
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH="$JAVA_HOME/bin:$PATH"
cd maven-cloudwalk-cloud && mvn -U -DskipTests clean install
cd ../maven-intelligent-cwoscomponent && mvn -U -DskipTests clean install
cd ../maven-cw-elevator-application && mvn -U -DskipTests clean install
随 POM 与私服策略变更请更新本文。