摘要:版本选择目前企业使用最多的版本,最为稳定。例如使用的就是版本引入了内存池等重大特性,可以有效的降低负载,使用的就是已经被废弃了,具体可参见所以这里我搭建的源码阅读环境是存在的版本。
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("//")) //过滤掉 //之类的注释 .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/...
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/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 的前生今世 ...
阅读 2354·2021-11-11 16:54
阅读 1168·2021-09-22 15:23
阅读 3586·2021-09-07 09:59
阅读 1931·2021-09-02 15:41
阅读 3255·2021-08-17 10:13
阅读 2971·2019-08-30 15:53
阅读 1207·2019-08-30 13:57
阅读 1169·2019-08-29 15:16