有时候我们可能需要定制netty,或者为netty提交pr,这时候就需要在netty原项目的基础上进行修改。本文将在idea中跑这个项目。

拉代码:

git clone https://github.com/netty/netty.git

这是一个使用jdk8开发的maven项目,idea对于maven项目的支持做的很好,在我们导入后,修改Project Structure的jdk为1.8(每个java程序员都应该安装了1.8的jdk)。

打开example模块,里面由很多示例代码。我们这里以SocksServer为例。

io.netty.example.socksproxy.SocksServer

执行main方法,编译报错:

D:\IdeaProjects\netty\transport-sctp\src\main\java\io\netty\handler\codec\sctp\SctpMessageCompletionHandler.java:25:32
java: 程序包io.netty.util.collection不存在

io.netty.util.collection这是一个由common模块生成的包,里面的类被其他模块依赖了,需要先编译此模块才能跑其他模块。

而common模块又依赖dev-tools模块,会从远端仓库下载,你也可以自己将dev-tools compile install到本地方便自己开发。

编译common模块报错,必须使用64位的jdk。(我一直不知道自己电脑上的jdk8是32位的)

Rule 2: org.apache.maven.plugins.enforcer.RequireProperty failed with message:
x86_64/AARCH64/PPCLE64/s390x_64/loongarch64 JDK must be used.

换成64位jdk后重新编译common模块

[INFO] Reading API signatures: D:\IdeaProjects\netty\common\target\dev-tools\forbidden\signatures.txt
[INFO] Loading classes to check...
[INFO] Scanning classes for violations...
[INFO] Scanned 416 (and 267 related) class file(s) for forbidden API invocations (in 0.35s), 0 error(s).
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

此时io.netty.example.socksproxy.SocksServer可以正常debug跑起来了

Connected to the target VM, address: '127.0.0.1:13621', transport: 'socket'
15:42:19.839 [nioEventLoopGroup-2-1] INFO  i.n.handler.logging.LoggingHandler - [id: 0x542729b8] REGISTERED
15:42:19.846 [nioEventLoopGroup-2-1] INFO  i.n.handler.logging.LoggingHandler - [id: 0x542729b8] BIND: 0.0.0.0/0.0.0.0:1080
15:42:19.853 [nioEventLoopGroup-2-1] INFO  i.n.handler.logging.LoggingHandler - [id: 0x542729b8, L:/0:0:0:0:0:0:0:0:1080] ACTIVE

接下来就可以在原项目上修改与debug了。

标签: none

仅有一条评论

  1. 怎么收藏这篇文章?

添加新评论