引入 org.springframework:spring-web:4.1.3.RELEASE 後,web.xml 配置 ContextLoaderListener 報錯找不到類;啟動拋 java.lang.ArrayIndexOutOfBoundsException: 60533。刪除依賴則啟動報錯。
spring-web-4.1.3.RELEASE.jar 時網絡波動/倉庫鏡像異常,導致 JAR 內部 .class 文件大小為 0 字節(解壓後發現)。ArrayIndexOutOfBoundsException 發生於 ASM 字節碼解析階段(Spring 核心用 ASM 掃描註解),讀取空 class 文件導致索引越界。# 1. 刪除本地損壞制品
rm -rf ~/.m2/repository/org/springframework/spring-web/4.1.3.RELEASE
# 2. 強制重新下載(可指定鏡像)
mvn dependency:get -Dartifact=org.springframework:spring-web:4.1.3.RELEASE:jar -DremoteRepositories=aliyun::https://maven.aliyun.com/nexus/content/groups/public
# 3. 驗證 JAR 完整性
jar tf ~/.m2/repository/org/springframework/spring-web/4.1.3.RELEASE/spring-web-4.1.3.RELEASE.jar | grep ContextLoaderListener
# 應輸出 org/springframework/web/context/ContextLoaderListener.class
# 4. 清理並重建
mvn clean compile
| 層面 | 措施 |
|---|---|
| 倉庫層 | 使用 Nexus/Artifactory 代理中央倉庫,開啟 校驗和驗證(MD5/SHA1),拒絕損壞制品入庫 |
| 構建層 | mvn --fail-never dependency:verify 或啟用 maven-enforcer-plugin 強制簽名驗證 |
| IDE 層 | IDEA/Eclipse Maven 設置 Download Sources/Documentation 可選,但 Download Artifacts 必開 |
| 依賴管理 | 統一 dependencyManagement 鎖定版本,避免傳遞依賴衝突導致多版本共存 |
mvn dependency:tree -Dverbose 檢查衝突版本(omitted for conflict)。mvn dependency:analyze 發現未聲明/未使用依賴。target/classes、WEB-INF/lib 實際打包內容。install 順序,父模組 install 後子模組才能解析 SNAPSHOT。教訓:「依賴已在本地倉庫」≠「依賴可用」。異常堆疊指向核心類缺失且邏輯無誤時,優先懷疑 JAR 損壞,刪除重下載是性價比最高的第一步。