1. 依赖工具

Maven
Git
JDK
IntelliJ IDEA

2. 源码拉取

从官方仓库 https://github.com/netty/netty Fork 出属于自己的仓库。为什么要 Fork ?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。
使用 IntelliJ IDEA 从 Fork 出来的仓库拉取代码。
本文使用的 Netty 版本为 4.1.26.Final-SNAPSHOT 。

3. Maven Profile

打开 IDEA 的 Maven Projects ,选择对应的 Profiles 。如下图所示
在这里插入图片描述

jdk8 :笔者使用的 JDK 版本是 8 ,所以勾选了 jdk8 。如果错误的选择,可能会报如下错误:

java.lang.NoSuchMethodError:
java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer

mac :选择对应的系统版本。 笔者手头没有 windows 的电脑,所以不知道该怎么选。
修改完成后,点击左上角的【刷新】按钮,进行依赖下载,耐心等待…

4. 解决依赖报错

在 codec-redis 模块中,类 FixedRedisMessagePool 会报如下类不存在的问题:

import io.netty.util.collection.LongObjectHashMap;
import io.netty.util.collection.LongObjectMap;

具体如下图所示:
在这里插入图片描述
解决方式如下:

cd common;
mvn clean compile;

跳转到 common 模块中,编译生成对应的类。为什么可以通过编译生成对应的类呢,原因参见 common 模块的 src/java/templates/io/netty/util/collection 目录下的 .template 文件。
在 Github 上,也有多个针对这个情况讨论的 issue :
《Can not find class io.netty.util.collection.LongObjectHashMap in 4.1.8.final》(https://github.com/netty/netty/issues/7518)
《io.netty.util.collection.LongObjectHashMap not found at branch 4.1》(https://github.com/netty/netty/issues/5447)

5. example 模块

在 example 模块里,官网提供了多个 Netty 的使用示例。
本文以 echo 包下来作为示例。哈哈哈,因为最简单。

5.1 EchoServer

执行 io.netty.example.echo.EchoServer 的 #main(args) 方法,启动服务端。输出日志如下:

20:41:41.215 [nioEventLoopGroup-2-1] INFO  i.n.handler.logging.LoggingHandler - [id: 0xd0219f1c] REGISTERED
20:41:41.222 [nioEventLoopGroup-2-1] INFO  i.n.handler.logging.LoggingHandler - [id: 0xd0219f1c] BIND: 0.0.0.0/0.0.0.0:8007
20:41:41.228 [nioEventLoopGroup-2-1] INFO  i.n.handler.logging.LoggingHandler - [id: 0xd0219f1c, L:/0:0:0:0:0:0:0:0:8007] ACTIVE

5.2 EchoClient

执行 io.netty.example.echo.EchoClientr 的 #main(args) 方法,启动客户端。不输出任何日志。
但是,EchoServer 会新输出如下日志:

20:41:45.642 [nioEventLoopGroup-2-1] INFO  i.n.handler.logging.LoggingHandler - [id: 0xd0219f1c, L:/0:0:0:0:0:0:0:0:8007] READ: [id: 0x32721f32, L:/127.0.0.1:8007 - R:/127.0.0.1:50663]
20:41:45.646 [nioEventLoopGroup-2-1] INFO  i.n.handler.logging.LoggingHandler - [id: 0xd0219f1c, L:/0:0:0:0:0:0:0:0:8007] READ COMPLETE

原文:芋道源码http://svip.iocoder.cn/Netty/build-debugging-environment/
其他:zhisheng 的文章:《Netty系列文章(一):Netty 源码阅读之初始环境搭建》 (http://www.54tianzhisheng.cn/2017/12/08/netty-01-env/)。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐