最近在看websocket的东西,正好netty中有讲到websocket,所以把netty源码拿来看一下。该文章就是本人在搭建netty源码编译环境的一些收获和感悟。望各位指正!不甚感激。在这里顺便给大家推荐一下 李林峰老师的新书《netty权威指南第二版》,其微博@nettying 。更有其书的代码对应的代码https://github.com/*nxian124/nettybook2.git(当然是被授权才放到我git上的)
本人将编译好的源码放在git上,其地址是 :https://github.com/*nxian124/netty4.0.27Learn,本人将在以后提交一些注解和领会到该地址。下面将会告诉读者在windows 64位和ubuntu14.04 64上的如何搭建编译netty源码环境。博主用的netty版本是netty 4.0.27 Final,直接从netty在git上的地址下载:https://github.com/netty/netty
在windows 64下搭建编译源码环境 需要强调的是32位系统编译tcnative肯定会有问题,因为不存在32位的jar包,所以在mvn install的时候下载不到指定的jar,一定会报错。所以该文章只能支持win和Linux64位的操作。
1. 下载netty源码, 2. 利用maven编译netty项目,通常不嫩直接执行 mvn clean install ,因为checkstyle 的缘故(具体原因可以参看:http://www.4byte.cn/question/325644/mvn-compile-error-invalid-newline-character.html#)而是使用mvn compile -Dcheckstyle.skip=true (目的是跳过checkstyle )。 3. 为了方面还可以跳过测试,即加上 -DskipTest 如果还有问题(对于windows 直接使用netty官网下载的源码,可能存在问题)。 博主遇到的问题和解决方案如下: 1. 如果是提示 netty-tcnative 的问题 需要修改如下四个目录下的pom.xml文件 将tcnative 下对应的 <classifier>${os.detected.classifier}</classifier>注释。四个目录分别是:主目录,handler,example,以及testsuite。(如果还有其他项目报错,估计也是要修改其对应的pom.xml 文件,将其上面提到的 <classifier>${os.detected.classifier}</classifier> 注释) 然后再执行一个 mvn clean compile -Dcheckstyle.skip=true -Dtest 2. 如果还是报错 那么试一下 mvn install -DskipTests -Dcheckstyle.skip=true (博主尝试了一下用mvn install -Dcheckstyle.skip=true -Dmaven.test.skip=true 依然报错,更多有关-DskipTests和-Dmaven.test.skip=true 参考: http://zephiruswt.blog.51cto.com/5193151/1302770) 3. 如果作为maven项目导入eclipse,出现如下错误,你就要进行第四步 4. 将项目直接转为java project项目,进而作为已经存在的项目导入eclipse中。 执行maven命令 mvn eclipse:eclipse
PS:博主发现上传到github上的,已经编译好的源码项目不带 .project 文件,所以你就不能直接作为project导入eclipse了。所以还是要你自己按照上面的方法弄一次,不然eclipse会识别不到。
在ubuntu 14.04(64) 编译netty源码 如果在ubuntu 14.04 64位 编译源码,就不能按照上面的方式了,至少不需要修改pom.xml文件。 具体的执行步骤如下: 1. 确保保持pom文件跟netty官网中的一致。 2. 确保使用的是Linux 64位(ubuntu、centtos)。博主使用的是ubuntu14.04 64位 3. 确保你的Linux core是3.8+(查询方式是 uname -r) 4. 安装tcnative必要的依赖 (参考:http://netty.io/wiki/native-transports.html) 在命令行中使用: # RHEL/CentOS/Fedora: sudo yum install autoconf automake libtool glibc-devel.i686 glibc-devel libgcc.i686 make tar # Debian/Ubuntu: sudo apt-get install autoconf automake libtool make gcc-multilib tar 5. 编译安装 mvn -U -X clean package -Dmaven.test.skip=true 或者 mvn install -U -X -DskipTests -Dcheckstyle.skip=true
如果还有问题,更多请参考:https://github.com/netty/netty/issues/2558