成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

依賴 Jar 沒有傳遞,導致找不到類文件而啟動失敗了

開發 前端
在一頓噼里啪啦之后,代碼寫完,Junit 測試完畢、接口文檔 Upload 到 YApi 完畢。果斷發布 dev 環境!

[[411138]]

前言

最近頻繁遇到找不到類文件錯誤。

Caused by: java.lang.NoClassDefFoundError:xxx

就這個家伙。

但是我本地啟動服務是正常的,前前后后經歷了

驚訝 -> 疑惑 -> 煩躁 -> 暴躁 -> 心塞 -> 欣喜

在短短的小半天內,感覺心情像過了一個過山車+大擺錘,結束了,腦袋都是暈的。

關鍵是本地是正常的!

現在,請跟隨我的視角,來看看這個讓人心態差點爆炸的異常吧!

1遇到問題

在一頓噼里啪啦之后,代碼寫完,Junit 測試完畢、接口文檔 Upload 到 YApi 完畢。果斷發布 dev 環境!

直接進入啟動重試!(PS:通過發布平臺發布的)

這時候第一反應:本地啟動一下試試!

  1. web started successfully 

本地正常啊!

肯定是我啟動姿勢不正確,重新發布一下!

實錘了,和啟動姿勢沒關系!

從淡定到暴躁

當然是看啟動日志了。

PS: 服務沒起來,只能 ssh 到服務器看日志。

  1. Caused by: java.lang.ClassNotFoundException:xxx 
  2. Caused by: java.lang.NoClassDefFoundError:xxx 

就這倆哥們,類找不到,奇了怪了。

這個類是通過三方 jar 包依賴進來的,我在 IDEA 里面 ? + B 還能進入源碼!

這我不禁懷疑是不是因為開發環境使用的 Docker 容器的原因。

發布其他分支,是可以的。

莫非就是因為我引入了一個其他小伙伴提供的 jar,導致我現在用不了!

又是一頓調整依賴!

還不行!

難道是我引入的引來版本不對?

從其他項目找一找怎么用的!

依然不行!

難道是他的 jar 包里面又依賴了很多其他的?

試著 exclusion 掉其他依賴!

依然不行!

是我本地 jar 緩存?

刪除本地磁盤上的 jar 試試?

解決方案就在靈光一閃

雖然 dev 用的是容器,咱拉不下來 jar 包。但是我可以本地打個包試試!

clean package

得到一個 jar 包

  1. jar -xvf xxx-web-1.0.0-SNAPSHOT.jar 

進到 BOOT-INF/lib 里面

  1. % > ls | grep user 

竟然啥也沒有!

既然是打包沒有打進去,那就看一下 mvn 依賴樹的問題吧!

解決問題

項目結構

web 啟動失敗,是因為 service 添加的依賴,沒有傳遞到 web,所以 web 打包沒有打進去那個類。

注意,這里可以正常打包,本地環境可以正常啟動。

奇怪吧!

現在進入解決方式:

  • 查看 maven 依賴樹

進入到 web module,執行以下命令。

  1. mvn dependency:tree>tree.txt 

有這么一行錯誤:

  1. [WARNING] The POM for com.xxx:xxx-xxx-xxx:jar:1.0.1-SNAPSHOT is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details 

問題描述的很清晰,依賴傳遞失敗,因為啥依賴傳遞失敗呢?

再開啟 debug 打印下錯誤:

  1. mvn -X dependency:tree>tree.txt 
  2. [WARNING] The POM for com.xxx:xxx-xxx-xxx:jar:1.0.1-SNAPSHOT is invalid, transitive dependencies (if any) will not be available: 2 problems were encountered while building the effective model for com.xxx:xxx-xxx-xxx:jar:1.0.1-SNAPSHOT 
  3. [ERROR] 'dependencies.dependency.version' for com.alibaba:easyexcel:jar is missing. @  
  4. [ERROR] 'dependencies.dependency.version' for com.xxx:cache:jar is missing. @  

說是因為下面兩個 jar 的 version 找不到,所以會導致依賴傳遞失敗。

PS: 我所有的依賴版本都是在父 POM 進行維護的,子 module 只有依賴 groupId 和 artifactId。

所以歸根到底,是因為父 POM 的版本沒有傳遞下去!

仔細一瞅,發現父 POM 的版本是 1.0.0,各個 module 的 parent 節點的屬性也是 1.0.0

之前都是 SNAPSHOT 版本,后來因為公司的 nexus 配置了自動清除長時間不用的 SNAPSHOT 版本的依賴,我就去掉了 SNAPSHOT。

父 POM deploy 到私服的就是一個空的項目,里面就一個 POM 文件。

最后升級了一下父 POM 的版本,重新 deploy 一下,再改改各個 module 的依賴版本。

大功告成!

2總結

本文主要是含淚記下一個苦逼的問題排查過程。害,竟然沒有第一時間想到原因!

下次再遇到記得 mvn -X dependency:tree>tree.txt 看下依賴樹!

我的實踐已經證明了:重啟、清緩存、排除依賴都是沒用的!

本文轉載自微信公眾號「程序員小航」,可以通過以下二維碼關注。轉載本文請聯系程序員小航公眾號。

 

責任編輯:武曉燕 來源: 程序員小航
相關推薦

2021-07-29 09:47:06

IDEA 項目maven

2021-06-11 10:33:14

MySQLPidSocket

2010-04-09 15:47:59

找不到無線網絡

2010-08-25 09:00:09

無線路由器

2010-09-07 13:15:32

無線路由器無線網絡

2010-08-31 09:52:25

無線路由器

2019-04-10 08:30:53

Python機器學習工具

2012-05-04 08:58:24

Win7

2022-07-18 10:08:17

DevOps運維編排

2012-12-13 13:38:22

nginx目錄遍歷漏洞

2022-08-03 08:03:25

rootGreatSQL動數據庫

2023-01-31 08:42:58

Mysqldump數據報錯

2020-01-10 14:53:54

LinuxWindows嵌入式

2021-02-28 07:47:41

數據庫密碼加密

2022-11-07 08:58:41

搜索數據索引

2020-01-14 11:36:59

VRARCES

2025-06-03 08:26:00

智能體LLM開發

2010-01-12 13:47:18

Linux grub

2013-07-17 14:13:08

產品產品失敗

2021-10-16 17:51:49

通信
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费久久精品 | 五月婷婷丁香婷婷 | 懂色av蜜桃av | 国产色片 | 成人九区 | 国产资源视频 | 久久成人久久 | 国产高清免费 | 888久久久| 国产一区精品在线 | 中文字幕av一区二区三区 | 日韩精品一区在线 | 久久精品久久精品 | 麻豆一区一区三区四区 | 一区二区三区四区不卡视频 | 日韩欧美在线视频 | 亚洲一区二区三区免费观看 | 日韩和的一区二区 | 欧美亚州| 91免费小视频 | 狠狠av | 高清欧美性猛交xxxx黑人猛交 | 精品一区二区三区91 | 视频一区二区三区中文字幕 | 伊人春色成人网 | 国产黄色小视频 | 99精品一区 | 一区二区三区免费 | 欧美一区二区三区一在线观看 | 中文字幕精品视频在线观看 | 亚洲 自拍 另类 欧美 丝袜 | 国产乱码精品一区二区三区五月婷 | 日本手机看片 | 久久亚洲美女 | 亚洲一区国产精品 | av在线播放不卡 | 在线黄| 中文字幕国产 | 91国内在线观看 | 成人在线中文字幕 | 国产熟熟 |