gRPC是Google最近才发布的一个基于HTTP/2和Protocol Buffer的RPC框架。
项目地址:https://github.com/grpc/grpc-java。
官方文档其实说的比较清楚,但它主要针对的Linux,Windows下面稍微麻烦点。
环境准备
Gradle 安装
因为GRPC工程是基于Gradle的,所以需要先安装它,把它理解为类似Maven的工具,
比较简单就啰嗦了。下载地址,我安装的是2.3版本。
Maven 安装
需要3.2版本,如果你不是的话更新下就可以,安装也很简单不赘述了。
protobuf 编译
关于protobuf的内容可以看我前一篇的博客,这一步很重要,上一篇提到的protoc.exe编译程序也是这步来的,
官方说需要3.0.0-alpha-2那么直接就下载这个版本的代码,不要git clone master了,否则编译的时候需要
一个gtest的目录,master没有这个目录还要下载。
代码下载下来之后直接用Visual Studio(各个版本都行VS会自己转换)打开就可以。
选择Release模式编译,正常情况应该很顺利就编译完成了。编译完成后主要是libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe
这四个库或程序后面需要用到。
mvn install protobuf-java 和 protobuf-javanano 工程
GRPC安装依赖这两个工程,javanano可能需要另外下载。先将上面编译出来的protoc.exe复制到$PROTOBUF_HOME$\src(protobuf-3.0.0-alpha-2\src)目录下,
然后分别打开$PROTOBUF_HOME$\java和$PROTOBUF_HOME$\javanano目录下的pom文件,搜索../src/protoc替换为../src/protoc.exe,
然后分别instal:
cd java
mvn install
cd ../javanano
mvn install其实这两个工程Maven中央仓库都有,可以直接从中央仓库下载。
GRPC 编译
一切都准备好后就可以编译GRPC了。
源码下载
$ git clone https://github.com/grpc/grpc-java.gitNetty 和 HTTP/2 依赖安装
GRPC依赖netty4.1+和codec-http2 (HTTP/2的介绍可以看我之前的一篇博客)。
$ git submodule update --init
$ cd lib/netty
$ mvn install -pl codec-http2 -am -DskipTests=true编译
编译过程中gradle wrapper需要到这里下载gradle,最好全程科学上网。实在没办法可以先下好gradle,修改
gradle-wrapper.properties如下:
#Tue Jan 27 15:29:30 PST 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
#distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
distributionUrl=gradle-2.3-all.zip
windows下编译需要指定protobuf源码和编译出来的库文件,在grpc工程根目录创建文件gradle.properties,写入内容:
protobuf.include=C:\\path\\to\\protobuf-3.0.0-alpha-2\\src
protobuf.libs=C:\\path\\to\\protobuf-3.0.0-alpha-2\\vsprojects\\Release
编译grpc-java工程:
$ gradle install到目前为止还算顺利,但是,但是……目前其中有一个子模块compiler(protobuf_plugin)貌似只支持Linux下编译:
## System Requirement
* Linux
* The Github head of [Protobuf](https://github.com/google/protobuf) installed
* [Gradle](https://www.gradle.org/downloads) installed
因为benchmarks\和examples\都依赖protobuf_plugin,所以也都无法正常编译。
官方也明确说明了https://github.com/grpc/grpc-java/issues/87不支持:
Building on Windows with gradle doesn't currently work. Getting gradle set up correctly is a bit more involved than we thought.However, one can work around this issue by manually building the plugin with Visual Studio.
一个解决办法就是跟上面编译protobuf一样需要手动用VS编译protobuf_plugin。或者忽视这几个工程,核心的部分还是可以编译成功的。
编译完成后在相应的工程的build/libs目录下就能看到jar包了:
手动编译 protobuf_plugin
不折腾了……
网上搜了一圈还没找到在Windows上编译成功GRPC的,看来我是第一批吃螃蟹的人之一,在官方完全支持windows前还是乖乖滚回Linux吧~