Files
2026-04-24 23:49:37 +08:00

16 KiB
Raw Permalink Blame History

本地编译说明(Maven 工作区)

1. 环境与 JVM

  • Maven 进程 JVM:须为 JDK 8(与 maven-enforcer-plugin 及各父 POM java.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/...(或带端口 8081maven-public)。
  • 须在能访问该私服的网络环境(如内网/VPN)下执行,否则 intelligent-cwoscomponentcw-elevator-application-service 等模块会因 父 POM / 传递依赖无法解析 而失败。

3. 推荐编译顺序(依赖链)

在仓库根下按顺序 install(或至少 compile 前序模块并 install 到本地仓库;若使用自定义 settings.xmllocalRepository,构件会写入该路径):

  1. maven-cloudwalk-device-sdkmvn -DskipTests clean install — 提供 cn.cloudwalk:cloudwalk-device-sdk:2.2.0 父 POM 与 cloudwalk-device-sdk-protocol-entity(替代私服缺失父工程)。
  2. maven-cloudwalk-legacy-publicmvn -DskipTests clean install — 自 反1/*.jar.src.zip 提供 cloudwalk-cloud-common:3.7.2-Brussels-SRXcloudwalk-common-result / web / serialcwos-sdk-event:1.5.0-SNAPSHOTcloudwalk-intelligent-component-lock:1.1.1-SNAPSHOT(闭合 cloudwalk.legacy.public.versioncwos.sdk.event、电梯 lock 等;须在 maven-cloudwalk-cloud 之前安装,以便 cloudwalk-common-event 解析 cwos-sdk-event)。
  3. maven-cloudwalk-device-managermvn -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-commoncloudwalk-device-manager-interface(依赖第 2 步的 cloudwalk-common-result须在依赖其 interface 的其它工程之前安装)。
  4. maven-cwos-resourcemvn -DskipTests clean install — 提供 cwos-component-resourcecwos-portal 父 POM 及 cwos-java-sdk-resource 等(替代私服缺失的 CWOS 资源/门户父链)。
  5. maven-cloudwalk-intelligent-davinci-managermvn -DskipTests clean install — 提供 cn.cloudwalk.intelligent:cloudwalk-intelligent-davinci-manager:1.1.7-SNAPSHOT 父 POM 与 davinci-manager-commondavinci-manager-storage(替代私服缺失的 Davinci 父链;与电梯 davinci.manager.storage.version 对齐)。
  6. maven-cloudwalk-cloudmvn -DskipTests clean install — 提供 cloudwalk-common-eventcloudwalk-common-service 等(maven-cwos-device-authentication 依赖 cloudwalk-common-service,故 aks / device-authentication 须排在本步之后)。
  7. maven-cwos-common-aksmvn -DskipTests clean install — 自 反1/cwos-common-aks-interface-1.0.0-SNAPSHOT.jar.src.zip 提供 cn.cloudwalk.cloud:cwos-common-aks:1.0.0-SNAPSHOTcwos-common-aks-interface(依赖第 2 步 cloudwalk-common-result)。
  8. maven-cwos-device-authenticationmvn -DskipTests clean install — 自 反1/cwos-device-authentication-interface-1.0.0-SNAPSHOT.jar.src.zip 提供 cn.cloudwalk.cloud:cwos-device-authentication:1.0.0-SNAPSHOTcwos-device-authentication-interface(依赖第 1、3、6、7 步及 cwos-common-aks-interface)。
  9. maven-intelligent-cwoscomponentmvn -DskipTests clean install(依赖第 1 步的 protocol-entity 与 cloudwalk 模块)
  10. maven-cw-elevator-applicationmvn -DskipTests clean installservice 若仍失败,多为其它私服构件或业务源码问题,见下文)
  11. 其余:maven-ninca-crkmaven-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-resourcecwos-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 类是否在源码树中有同名 .javacwos-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-dataTenantVisitorFloorPolicyDao / Dto / DaoImpl / Mapper 4 个类型仅存在于本地 cw_libcw-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-common4.0.0-Brussels-SRX)与 maven-cloudwalk-legacy-public/cloudwalk-cloud-common3.7.2-Brussels-SRX 目录下仅有 pom.xmlpackaging=pom cloudwalk-cloud-common 在上游即为 BOM/聚合父 POM,不提供带 .class 的业务 JARcw_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 源码目录packagingpom,用于 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-applicationcommon / data 已补齐 spring-webCollectionUtils 与部分 DTO 反编译错误后,mvn clean compile 可编过至 data 模块。
cw-elevator-application-service cwos-*-resource / cwos-portal 父链可由 maven-cwos-resource 本地 install 解决;davinci-manager-storagemaven-cloudwalk-intelligent-davinci-managercloudwalk-common-result/web/serialcwos-sdk-eventcloudwalk-intelligent-component-lockmaven-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.0packaging pom)未发布到当前使用的 repository/maven-public
This failure was cached in the local repository Maven 已把「解析失败」缓存在本地(~/.m2 或你配置的 localRepository,如日志中的 /data/local/repo),在 update 间隔 内会不再重试,表现为持续失败。

处理建议(择一或组合):

  1. 在 Nexus 补齐 cn.cloudwalk:cloudwalk-device-sdk:2.2.0(含 protocol-entity 子模块坐标),或改用团队约定的 其他仓库settings.xml 里增加 mirror/repository)。
  2. 强制刷新缓存后重编:
    mvn -U -DskipTests clean install-U--update-snapshots,并促使重新检查 release 元数据)。
  3. 若确认私服已修好,可删除本地缓存目录后再编(路径示例,按坐标替换):
    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-resourcemaven-cloudwalk-intelligent-davinci-managerinstall;其余缺失再在 Nexus 补齐,或对构件执行 mvn install:install-file 安装到本地/私服。


6.3 警告(非本次失败主因,可后续治理)

日志 说明
cloudwalk-common-web:jar:3.7.2-Brussels-SRX is invalidcloudwalk-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 与私服策略变更请更新本文。