Windows 下编译 gRPC

Published: by Creative Commons Licence

gRPC是Google最近才发布的一个基于HTTP/2Protocol 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会自己转换)打开就可以。

protobuf-vsproject.png

选择Release模式编译,正常情况应该很顺利就编译完成了。编译完成后主要是libprotobuf.liblibprotobuf-lite.liblibprotoc.libprotoc.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.git

Netty 和 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包了:

grpc-compiler-result.png

手动编译 protobuf_plugin

不折腾了……

网上搜了一圈还没找到在Windows上编译成功GRPC的,看来我是第一批吃螃蟹的人之一,在官方完全支持windows前还是乖乖滚回Linux吧~