2017/3/14 | 周二 | 晴
背景
今天在浙江圖書(shū)館看Spring官方的一個(gè)Guide:Using WebSocket to build an interactive web application十酣。把網(wǎng)頁(yè)上的類(lèi)copy下來(lái)之后潘懊,卻暴露出一堆類(lèi)解析失敗的警告,像下面這個(gè)樣子:
這種問(wèn)題,就是當(dāng)前項(xiàng)目的classpath里沒(méi)有這些包或類(lèi)昼窗。
排查
不應(yīng)該啊,像Controller
已經(jīng)不知道用了多少次了,難道是沒(méi)有引入依賴简僧?我先打開(kāi)IDEA上的Maven窗口:
你所看到的已經(jīng)是問(wèn)題解決之后的情況了,最初的情況依賴樹(shù)下最頂層的7個(gè)包雕欺,左邊都沒(méi)有三角圖標(biāo)岛马,表示它們都沒(méi)有子依賴棉姐。而且sockjs-client和stomp-websocket都是像現(xiàn)在這樣有紅線標(biāo)識(shí)。
添加倉(cāng)庫(kù)鏡像
我首先注意到了被標(biāo)了紅線的sockjs-client和stomp-websocket啦逆,去本地倉(cāng)庫(kù)查看伞矩,對(duì)應(yīng)的路徑下確實(shí)沒(méi)有jar包。我又查看了下settings.xml中配置的倉(cāng)庫(kù)鏡像:
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
這是我之前為了加快下載依賴的速度夏志,配置了阿里云的倉(cāng)庫(kù)乃坤。我去這個(gè)倉(cāng)庫(kù)地址去找,果然沒(méi)有org.webjars的項(xiàng)目沟蔑。
然后我又去maven repository查了下湿诊,查到了:
我把這個(gè)倉(cāng)庫(kù)也添加到鏡像里了:
<mirror>
<id>central</id>
<name>central maven</name>
<url>http://central.maven.org/maven2/</url>
<mirrorOf>central</mirrorOf>
</mirror>
然后刷新Maven依賴,雖然那兩個(gè)依賴下紅線依舊瘦材,但是本地倉(cāng)庫(kù)里確實(shí)把jar下載下來(lái)了厅须。
后來(lái)重新打開(kāi)項(xiàng)目,那兩個(gè)依賴的警戒線就消失了食棕。
身份認(rèn)證
但是問(wèn)題依然沒(méi)有解決朗和,我又檢查了本地倉(cāng)庫(kù)的spring-boot-starter-websocket,jar包是有的簿晓,但是打開(kāi)pom.xml看到的內(nèi)容卻是這樣的:
<html>
<head>
<script type="text/javascript">location.</script>
</head>
<body>
Authentication is required. Click <a >here</a> to open the authentication page.
</body>
</html>
畢竟看過(guò)這么多pom文件了眶拉,一眼看出這是有問(wèn)題的。當(dāng)時(shí)也沒(méi)多想憔儿,直接把本地倉(cāng)庫(kù)下那個(gè)項(xiàng)目的目錄干掉了忆植,然后在IDEA刷新Maven依賴,重新下載皿曲。再打開(kāi)下載之后的pom.xml唱逢,正常了,而Maven窗口的spring-boot-starter-websocket
下的子依賴也顯示出來(lái)了:
我又查了其他幾個(gè)依賴屋休,發(fā)現(xiàn)都有這個(gè)問(wèn)題坞古,pom文件里莫名其妙的內(nèi)容。我打開(kāi)了pom文件中的地址劫樟,結(jié)果是這樣子:
原來(lái)如此痪枫,因?yàn)槲沂褂玫氖菆D書(shū)館的zjlib-guest這個(gè)wifi。這個(gè)wifi是為游客準(zhǔn)備的叠艳,每隔一段時(shí)間就需要用戶重新驗(yàn)證身份奶陈。我下載依賴的請(qǐng)求都被它給攔截了,結(jié)果確實(shí)下載了依賴附较,但是pom文件的內(nèi)容是有問(wèn)題的吃粒。這個(gè)時(shí)候即使網(wǎng)絡(luò)問(wèn)題已經(jīng)不存在了,因?yàn)楸镜貍}(cāng)庫(kù)已經(jīng)有了pom文件拒课,maven也不會(huì)重新下載徐勃。我只有手動(dòng)刪除對(duì)應(yīng)的項(xiàng)目事示,maven才會(huì)去重新下載。
圖書(shū)館的wifi
圖書(shū)館為注冊(cè)用戶準(zhǔn)備的wifi是zjlib-web僻肖,但是這個(gè)wifi實(shí)在太堵肖爵。
收集整理
在這一次排查的過(guò)程中,我認(rèn)知到了以下幾點(diǎn):
- 阿里云的Maven倉(cāng)庫(kù)是不完整的臀脏。
- 網(wǎng)絡(luò)問(wèn)題可以產(chǎn)生錯(cuò)誤的pom文件劝堪,而一旦錯(cuò)誤的pom文件已經(jīng)存在,就必須手動(dòng)刪除揉稚,才能重新下載秒啦。
- 使用IDEA 的Maven窗口也可以查看依賴關(guān)系。