摘要:版本選擇目前企業使用最多的版本,最為穩定。例如使用的就是版本引入了內存池等重大特性,可以有效的降低負載,使用的就是已經被廢棄了,具體可參見所以這里我搭建的源碼閱讀環境是存在的版本。
Netty 簡介
Netty 是由 JBOSS 提供的一個開源的 java 網絡編程框架,主要是對 java 的 nio 包進行了再次封裝。Netty 比 java 原生的nio 包提供了更加強大、穩定的功能和易于使用的 api。 netty 的作者是 Trustin Lee,這是一個韓國人,他還開發了另外一個著名的網絡編程框架,mina。二者在很多方面都十分相似,它們的線程模型也是基本一致 。不過 netty 社區的活躍程度要 mina 高得多。
版本選擇:
3.x 目前企業使用最多的版本,最為穩定。例如dubbo使用的就是3.x版本
4.x 引入了內存池等重大特性,可以有效的降低GC負載,rocketmq使用的就是4.x
5.x 已經被廢棄了,具體可參見 https://github.com/netty/nett...
所以這里我搭建的源碼閱讀環境是存在的 4.1 版本。
準備工具IDEA 2017
環境搭建在 IDEA 中導入項目地址:https://github.com/netty/nett... ,然后就會自動下載項目所有的依賴,但是請注意:
必須在 IDEA 中將 Profiles 中的所有都勾選上,否則會導致很多 jar 包拉不下來,如下圖:
然后就是耐心等待了,一直到所有的 jar 包拉取下來。
中途你可能會遇到如下問題:
這里的是 1.5 版本,導致我們如果想用些高級的語法會完全報錯。
如果你把這個版本設置為 8 的版本后,
下面會提示你,項目是從 maven 導過來的,如果 maven 配置改變重新 reimport 后,任何在這里的改變都會丟失。
同時你會看到項目的 Java Compile 版本是 1.5 的,如下圖:
同樣,你在這里修改,如果 maven 配置改變重新 reimport 后,任何在這里的改變也都會丟失。我估計碰到這種問題的不少。
總結起來原因就是 maven 中的編譯版本就是 1.5 的,所以才會導致這里的問題發生,如果想完全修改好(一勞永逸)。請直接對 pom 文件動刀,就是干!
只需把大項目(netty-parent)的那個 pom.xml 修改個屬性,把版本信息提高到 1.8。
在等待它拉取 jar 包吧
搞完了之后發現還有兩個模塊(netty-bom、netty-dev-tools)不能設置到 版本,只能手動的和上面那種設置 language level 和 Java compile 為 1.8 了。
最后你會發現這里的完全沒有報錯了,開心不?
代碼行數統計額,看到項目這么多子模塊,你都不知道該從哪里下手開始看,那么我就寫了個簡單的 Java 腳本去大概的統計每個子項目代碼的行數。先看看統計結果:
整個項目差不多 23 萬。(過濾了空行、各種注釋和 @Override 之后的 Java 代碼行數),靠這個數字很嚇人!
來看看我的腳本代碼吧:
public static void main(String[] args) throws Exception { long count = Files.walk(Paths.get("C:JetBrainsIDEAProject etty ransport-udt")) // 遞歸獲得項目目錄下的所有文件 .filter(file -> !Files.isDirectory(file)) // 篩選出文件 .filter(file -> file.toString().endsWith(".java")) // 篩選出 java 文件 .flatMap(Try.of(file -> Files.lines(file), Stream.empty())) // 將會拋出受檢異常的 Lambda 包裝為 拋出非受檢異常的 Lambda .filter(line -> !line.trim().isEmpty()) // 過濾掉空行 .filter(line -> !line.trim().startsWith("http://")) //過濾掉 //之類的注釋 .filter(line -> !(line.trim().startsWith("/*") && line.trim().endsWith("*/"))) //過濾掉/* */之類的注釋 .filter(line -> !(line.trim().startsWith("/*") && !line.trim().endsWith("*/"))) //過濾掉以 /* 開頭的注釋(去除空格后的開頭) .filter(line -> !(!line.trim().startsWith("/*") && line.trim().endsWith("*/"))) //過濾掉已 */ 結尾的注釋 .filter(line -> !line.trim().startsWith("*")) //過濾掉 javadoc 中的文字注釋 .filter(line -> !line.trim().startsWith("@Override")) //過濾掉方法上含 @Override 的 .count(); System.out.println("代碼行數:" + count); }
后面我會把我閱讀源碼的中文注釋及解析之類的更新到我的 GitHub 去(歡迎關注、我是來騙 star 的),https://github.com/zhisheng17... ,如果你不想去自己設置上面所說的這些(偷懶),那就直接 fork 我的這份吧!
最后環境搭建就寫到這里了,轉載請注明地址:http://www.54tianzhisheng.cn/...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/70793.html
摘要:目錄源碼分析之番外篇的前生今世的前生今世之一簡介的前生今世之二小結的前生今世之三詳解的前生今世之四詳解源碼分析之零磨刀不誤砍柴工源碼分析環境搭建源碼分析之一揭開神秘的紅蓋頭源碼分析之一揭開神秘的紅蓋頭客戶端源碼分析之一揭開神秘的紅蓋頭服務器 目錄 Netty 源碼分析之 番外篇 Java NIO 的前生今世 Java NIO 的前生今世 之一 簡介 Java NIO 的前生今世 ...
摘要:目錄此文章屬于源碼之下無秘密做最好的源碼分析教程系列文章之一代碼下載首先到的倉庫中點擊右邊綠色的按鈕拷貝地址然后在終端中輸入如下命令克隆工程工程源碼較大加上國內網絡問題下載源碼可能會比較耗時當有如下輸出時表示克隆成功了如果有朋友實在下載太 目錄 此文章屬于 源碼之下無秘密 ── 做最好的 Netty 源碼分析教程 系列文章之一. 代碼下載 首先到 Netty 的 Github 倉庫 中...
摘要:前提好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時間比較早,而且堅持的時間也比較久,一直到現在也是一直保持著更新狀態。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時...
摘要:目錄源碼之下無秘密做最好的源碼分析教程源碼分析之番外篇的前生今世的前生今世之一簡介的前生今世之二小結的前生今世之三詳解的前生今世之四詳解源碼分析之零磨刀不誤砍柴工源碼分析環境搭建源碼分析之一揭開神秘的紅蓋頭源碼分析之一揭開神秘的紅蓋頭客戶端 目錄 源碼之下無秘密 ── 做最好的 Netty 源碼分析教程 Netty 源碼分析之 番外篇 Java NIO 的前生今世 Java NI...
摘要:目錄源碼分析之番外篇的前生今世的前生今世之一簡介的前生今世之二小結的前生今世之三詳解的前生今世之四詳解源碼分析之零磨刀不誤砍柴工源碼分析環境搭建源碼分析之一揭開神秘的紅蓋頭源碼分析之一揭開神秘的紅蓋頭客戶端源碼分析之一揭開神秘的紅蓋頭服務器 目錄 Netty 源碼分析之 番外篇 Java NIO 的前生今世 Java NIO 的前生今世 之一 簡介 Java NIO 的前生今世 ...
閱讀 2412·2021-11-11 16:54
閱讀 1213·2021-09-22 15:23
閱讀 3656·2021-09-07 09:59
閱讀 2007·2021-09-02 15:41
閱讀 3292·2021-08-17 10:13
閱讀 3054·2019-08-30 15:53
閱讀 1242·2019-08-30 13:57
閱讀 1216·2019-08-29 15:16