Mac 下编译 netty 报错,提示 Netty/Transport/Native/Unix/Common
模块编译失败,到网上搜索一下,并未发现有人遇到过类似问题,因此做下记录。
问题排查
Netty 源码来自 https://github.com/netty/netty.git
,使用的是 4.1
分支,代码不至于问题
编译使用的命令是 mvn clean install -Dmaven.test.skip
编译结果如下
1 | [INFO] Reactor Summary for Netty 4.1.59.Final-SNAPSHOT: |
很明显是 Netty/Transport/Native/Unix/Common
编译未通过,查看后面的报错提示
1 | [ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run (build-native-lib) on project netty-transport-native-unix-common: An Ant BuildException has occured: exec returned: 1 |
出现一个 Ant 构建异常,加上 -X
参数重新执行编译,命令如下
1 | mvn clean install -Dmaven.test.skip=true -X |
得到如下提示信息
1 | [ERROR] Failed to execute goal org.apache.maven.plugins:maven-antrun-plugin:1.8:run (build-native-lib) on project netty-transport-native-unix-common: An Ant BuildException has occured: exec returned: 1 |
有这样一行
1 | Caused by: org.apache.tools.ant.BuildException: exec returned: 1 |
看上去是 Ant 命令安装有问题,但不知道是什么原因。往上翻下提示,看看有没有执行信息提示
1 | [INFO] Executing tasks |
发现是少了 /Library/Developer/CommandLineTools/usr/bin/xcrun
这个提示好熟悉,是还未安装 Xcode Comand-line Tools
执行如下命令下载并安装
1 | xcode-select --install |
然后重新编译,提示如下信息
1 | main: |
未找到 jni.h
头文件。
检查 JAVA_HOME
,发现并未设置
1 | ➜ ~ echo $JAVA_HOME |
添加 JAVA_HOME
变量后编译通过
总结
若 netty 编译失败,请检查以下各项是否正常
Xcode Comand-line Tools
新安装的 mac 系统,默认是未安装的,可执行
xcode-select --install
命令安装JAVA_HOME
若未设置,会提示找不到
jni.h
头文件安装必要的工具和 lib 库
1
brew install autoconf automake libtool
如果你是用的 Linux 系统,请参考以下命令安装依赖
1
2
3
4
5
6
7RHEL/CentOS/Fedora:
sudo yum install autoconf automake libtool make tar \
glibc-devel \
libgcc.i686 glibc-devel.i686
Debian/Ubuntu:
sudo apt-get install autoconf automake libtool make tar \
gcc
更多信息请参考 Native transports