新聞中心
本文轉(zhuǎn)載自微信公眾號(hào)「小猿來(lái)也」,作者小猿來(lái)也。轉(zhuǎn)載本文請(qǐng)聯(lián)系小猿來(lái)也公眾號(hào)。

十載的向陽(yáng)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整向陽(yáng)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)公司從事“向陽(yáng)網(wǎng)站設(shè)計(jì)”,“向陽(yáng)網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
大家好,我是小猿來(lái)也,一個(gè)熱衷寫 bug 的程序猿。
一天我正在專心致志寫 Bug 的時(shí)候,一個(gè)同事跑過來(lái)找我。
說(shuō)有個(gè)很特別三方依賴庫(kù)的 jar 包,里面有一些 netty 的依賴,但是無(wú)法確定 netty 的具體版本,讓我?guī)兔o看看。
還有這事兒?
于是就讓他把 jar 發(fā)來(lái)看看,收到后我就趕緊給它解壓了,它的目錄結(jié)構(gòu)是下面這樣的:
當(dāng)時(shí)我就
這完全不按套路出牌呀,pom 文件哪里去了呢?gradle 文件哪里去了?這是什么黑科技呢?
盯著這個(gè) jar 包解壓之后的文件目錄,翻來(lái)覆去好幾遍,也發(fā)現(xiàn)相關(guān)依賴庫(kù)的坐標(biāo)聲明文件。
于是就問問同事有沒有源文件,他說(shuō)有,麻溜的發(fā)了過來(lái),比平時(shí)喊他吃飯都快。
我打開一看,依然啥都沒有。
頓時(shí)覺得這個(gè)類庫(kù)有點(diǎn)不一樣!
沒有依賴庫(kù)的坐標(biāo),怎么確定依賴庫(kù)的版本呢?
同事那邊還在催,能先把這個(gè)類庫(kù)為什么沒有依賴庫(kù)的坐標(biāo)這個(gè)點(diǎn)放一放。
所以就先用一個(gè)一個(gè)版本嘗試的方法來(lái)先幫他確定依賴的 netty 版本。
我隨便打開了一個(gè)文件,發(fā)現(xiàn)里面有很多org.jboss.netty的依賴。
然后我就打開了 Maven 的中央倉(cāng)庫(kù):https://mvnrepository.com 輸入了netty關(guān)鍵字進(jìn)行搜索。
搜索結(jié)果前面很多都是io.netty的信息,到了第7個(gè)才是org.jboss.netty的信息,就是我上圖中圈出來(lái)的那個(gè)。
然后我就點(diǎn)了進(jìn)去:https://mvnrepository.com/artifact/org.jboss.netty/netty
發(fā)現(xiàn)里面提供的主要是 Netty3.0.x、3.1.x、3.2.x的版本。
基于常識(shí)項(xiàng)目里引用 Netty 基本上都會(huì)引用Final的版本,所以我就在這個(gè)類庫(kù)的源文件中加了一個(gè) pom 文件,先拿3.2.10.Final這個(gè)版本試了下。
org.jboss.netty netty 3.2.10.Final
添加完上面的依賴坐標(biāo)信息后,嘗試編譯源代碼,發(fā)現(xiàn)缺少org.jboss.netty.handler.codec.http.websocketx包。
然后分別試了3.1.5.GA缺少org.jboss.netty.handler.codec.http.websocketx包,3.0.0.GA缺少org.jboss.netty.handler.codec.http包。
也就是說(shuō)3.0.x、3.1.x、3.2.x這個(gè)三個(gè)系列的版本里沒有合適的。
不死心的我又搜了一下整個(gè)中央倉(cāng)庫(kù)里,也沒能查到更多的關(guān)于org.jboss.netty的包。
所以到這里 https://mvnrepository.com/artifact/org.jboss.netty/netty 這條路是死了。
但是中央倉(cāng)庫(kù)中org.jboss.netty:https://mvnrepository.com/artifact/org.jboss.netty/netty 這個(gè)頁(yè)面中的一段說(shuō)明引起了我的注意。
Note: This artifact was moved to:
io.netty ? netty
對(duì),就是上面這段話,我在下圖圈出了它。
它告訴我們org.jboss.netty >> netty已經(jīng)遷移到了io.netty >> netty。而且它還提供了跳轉(zhuǎn)鏈接:https://mvnrepository.com/artifact/io.netty/netty ,所以我就點(diǎn)了進(jìn)去。
進(jìn)去后發(fā)現(xiàn)這個(gè)頁(yè)面里歸檔了3.3.x~3.10.x,以及4.0.x的 netty 制品。
我先拿3.10.6.Final試了下
io.netty netty 3.10.6.Final
重新編譯之后發(fā)現(xiàn)所有的import都沒問題了,但是會(huì)有部分類的部分方法缺失。
這個(gè)時(shí)候感覺版本已經(jīng)比較接近了相對(duì)正確的版本了,接下來(lái)就選了跟它最近的次新版本3.9.9.Final編譯之后發(fā)現(xiàn)完全沒問題了,在3.10.6.Final中缺失(已被刪除的)的方法果然是在3.9.9.Final標(biāo)記刪除的方法。
所以基本上可以認(rèn)為3.9.9.Final極有可能是這個(gè)三方 jar 所依賴的 netty 的版本。
稍微有點(diǎn)兒意外的發(fā)現(xiàn),就是在3.3.x~3.10.x中雖然依賴坐標(biāo)中的 groupId 是 io.netty 但是實(shí)際的包路徑卻是 org.jboss.netty.xxx,也算是漲了知識(shí)啦。
然后就是 https://mvnrepository.com/artifact/io.netty/netty 這個(gè)頁(yè)面上同樣有一段說(shuō)明
Note: This artifact was moved to:
io.netty ? netty-all
就是上圖中我圈出的部分,就是說(shuō)io.netty >> netty已經(jīng)遷移到了io.netty >> all了。
同時(shí)這個(gè)在netty的官網(wǎng)中也有說(shuō)明
好奇害死貓,所以我就又跑去 https://mvnrepository.com/artifact/io.netty/netty-all 這個(gè)頁(yè)面看了看。
我發(fā)現(xiàn)io.netty >> all中歸檔了4.0.x、4.1.x以及最新的5.0.x
經(jīng)過對(duì)比確認(rèn)我發(fā)現(xiàn)在3.2.x及其之前的版本中 netty 的 groupId 是org.jboss.netty,artifactId 是netty,包路徑是org.jboss.netty。
3.3.x~3.10.x中 netty 的 groupId 是io.netty,artifactId 是netty,包路徑是org.jboss.netty。
4.0.0.Final及其之后的版本中netty的 groupId 是io.netty,artifactId 是netty-all,包路徑是io.netty。
| version | groupId | artifactId | package |
|---|---|---|---|
| <=3.2.x | org.jboss.netty | netty | org.jboss.netty |
| 3.3.x~3.10.x | io.netty | netty | org.jboss.netty |
| =>4.0.0.Final | io.netty | netty-all | io.netty |
所以3.9.9.Final就是這個(gè)三方 jar 所依賴的 netty 的版本,應(yīng)該符合預(yù)期。
然后就用同事發(fā)來(lái)的 jar 對(duì)應(yīng)的源碼加上我添加的 pom 文件的信息,快速重新打了個(gè)包發(fā)給了他去救火。
他測(cè)試一下,最終給的反饋是完全沒問題。
到這里這次給一個(gè)無(wú)依賴坐標(biāo)的三方類庫(kù)項(xiàng)目確定 netty 依賴版本之旅就算結(jié)束了,哈哈,都看到這啦還不趕緊關(guān)注一下。
最后回到了文章開始的問題,你知道這種無(wú)明確依賴坐標(biāo)信息的 jar 包是如何生成的呢?為什么會(huì)有這種 jar 出現(xiàn)呢?它有什么弊端嗎?
當(dāng)前題目:一個(gè)SDK給我干懵了?大廠的SDK就這?
分享URL:http://m.fisionsoft.com.cn/article/cdcjgso.html


咨詢
建站咨詢
