程序运行期发生ClassNotFoundException是什么原因?为什么本地编译没有问题?
--- ### 一、问题核心原因分析 #### 1. **Maven依赖仲裁机制导致版本降级** Maven默认采用**最短路径优先**和**最先声明优先**的仲裁规则。例如: • 本地开发依赖路径:`A → B → C 1.0.1` • 线上打包依赖路径:`A → D → C 1.0.0`(路径更短或声明更早) 此时Maven会仲裁选择 `C 1.0.0`,导致 `C 1.0.1` 新增的类在线上缺失。 #### 2. **编译与运行环境的差异** • **编译期**:只需类声明存在即可通过(如接口、父类),不校验具体实现。 • **运行期**:需加载完整的类字节码,若仲裁后的版本缺少实现类,则抛出 `ClassNotFoundException`。 #### 3. **隐性依赖冲突** ...阅读全文