由于java-client读取数据需要调用编解码的动态链接库nebula_codec,而在maxos环境下是无法应用github源码中的libnebula_codec.so(因为该库是在linux下打成的),所以想要在mac下带用需要重新在mac环境中编译出动态链接库。
步骤:
一、 拉取nebula最新代码,上面已经更新了cmakeList
二、 安装cmake、glog、gflags、gtest 安装过程参考 spark reader 运行报错 - #5,来自 jude-zhu 帖子中@jude-zhu小姐姐的回复。
三、 在mac下编译nebula_codec。 进入nebula源代码的nebula/src/jni目录下:
• mkdir build && cd build
• cmake …
• make java_lib
编译好之后在build/src中会生成 libnebula_codec.dylib文件,该文件便是mac下的动态链接库。
四、 编译nebula-util jar包
由于java-client依赖nebula-util包进行数据编解码,所以需要重新编译打包nebula-util,目的是将libnebula_codec.dylib打到nebula-util的jar包中。
- 进入nebula源代码的nebula/src/jni/java目录下,修改当前目录下pom.xml中动态链接库名称(后面在编译库时可以统一生成的动态库的后缀名,就不用改代码了)
- 修改NebulaCodecResourceLoader.java文件中的NEBULA_LIB_NAME名
public class NebulaCodecResourceLoader {
private static final String NEBULA_LIB_NAME = "/libnebula_codec.dylib";
private static final Logger LOGGER = LoggerFactory.getLogger(NebulaCodec.class.getName());
- 在当前目录下执行maven打包命令
mvn clean package
打包结束后会在nebula/src/jni/java/target目录下生成nebula-utils-1.0.0-rc4.jar
- 之后在 nebula/src/jni/java/target 目录下执行以下命令,将jar包install到maven私服仓库。
mvn install:install-file -Dfile=nebula-utils-1.0.0-rc4.jar -DgroupId=com.vesoft -DartifactId=nebula-utils -Dversion=1.0.0-rc4 -Dpackaging=jar
五、 修改java-client中的动态库名并打包
-
修改RowReader.java中的动态库名
NativeUtils.loadLibraryFromJar("/libnebula_codec.dylib", NebulaCodec.class);
-
修改java-client的pom中nebula-utils依赖包的版本,修改为第3.4步打出来的nebula-utils-1.0.0-rc4.jar的版本
-
在java-client目录下maven打包
mvn clean compile package
====这样就可以在maxos下调用java-client了。