Generate protobuf service interface of Java.
在protoc解析protobuf文件生成代码的时候, 是不会解析里面的service生成接口文件的,只会解析message生成参数类。 所以需要一个第三方插件生成接口类
安装protoc
去https://github.com/google/protobuf/releases/
下载对应的最新版的 protoc-osx包,解压即可。
可以选择将bin加入到环境变量PATH中。安装brew
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" $ brew -v重新安装python(覆盖系统自带的)
$ brew install python $ python -v
安装python包管理工具pip
$ sudo easy_install pip $ pip -V
安装python的protobuf包
$ pip install protobuf $ pip freeze
安装protoc
去https://github.com/google/protobuf/releases/
下载对应的最新版的 protoc-win包,解压即可。
可以选择将bin加入到环境变量PATH中。安装python
去https://www.python.org/downloads/下载2.x版本;
例如:https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi;
直接安装,例如安装目录$PYTHON_HOME为C:\Python27设置环境变量。将
$PYTHON_HOME加入PATH中。$ python -v
安装python包管理工具pip 去https://pypi.python.org/pypi/pip#downloads下载压缩包;
解压到临时文件夹下,执行$ python setup.py install进行安装;
安装路径默认是$PYTHON_HOME\Scripts,例如C:\Python27\Scripts同样将这个路径加入到PATH中。$ pip -V
安装python的protobuf包
$ pip install protobuf $ pip freeze
使用pyinstaller进行编译为exe文件进行发布。
安装python的pyinstaller
$ pip install pyinstaller $ pip freeze
修改protobuf的
__init__.py,
默认路径为/usr/local/lib/python2.7/site-packages/google/protobuf/__init__.py
将下面几行依赖去掉。#if __name__ != '__main__':# try:# __import__('pkg_resources').declare_namespace(__name__)# except ImportError:# __path__ = __import__('pkgutil').extend_path(__path__, __name__)
到工程的根目录下。执行:
pyinstaller -F protoc-gen-bsoa-java.py -n protoc-gen-bsoa-java-1.0.0-osx-x86_64.exe
会生成
build和dist文件夹。
dist文件夹里的protoc-gen-bsoa-java-1.0.0-osx-x86_64.exe就是可以独立运行的exe。
安装python的pyinstaller(同时会自动安装pypiwin32)
$ pip install pyinstaller $ pip freeze
修改protobuf的
__init__.py,
默认路径为C:/Python27/Lib/site-packages/google/protobuf/__init__.py
将下面几行依赖去掉。#if __name__ != '__main__':# try:# __import__('pkg_resources').declare_namespace(__name__)# except ImportError:# __path__ = __import__('pkgutil').extend_path(__path__, __name__)
到工程的根目录下。执行:
$ pyinstaller -F protoc-gen-bsoa-java.py -n protoc-gen-bsoa-java-1.0.0-windows-x86_64.exe
会生成build和dist文件夹。
dist文件夹里的protoc-gen-bsoa-java-1.0.0-windows-x86_64.exe就是可以独立运行的exe。
# 自己指定地址export PROTOC_GEN_JAVA="protoc-gen-bsoa-java-1.0.0-osx-x86_64.exe"export PROTO_PATH="./test6"export OUTPUT_PATH="./build"
protoc \
--plugin=protoc-gen-bsoa-java=${PROTOC_GEN_JAVA} \
--bsoa-java_out=${OUTPUT_PATH} \
--java_out=${OUTPUT_PATH} \
--proto_path=${PROTO_PATH} \
${PROTO_PATH}/hello.proto
# 自己指定地址set PROTOC_GEN_JAVA="protoc-gen-bsoa-java-1.0.0-windows-x86_64.exe"set PROTO_PATH="./test6"set OUTPUT_PATH="./build"
protoc --plugin=protoc-gen-bsoa-java=%PROTOC_GEN_JAVA% --bsoa-java_out=%OUTPUT_PATH% --java_out=%OUTPUT_PATH% --proto_path=%PROTO_PATH% %PROTO_PATH%/hello.protoproto文件
syntax="proto3"; optionjava_multiple_files=true; optionjava_package="io.grpc.examples.helloworld"; optionjava_outer_classname="HelloWorldProto"; packagehelloworld; serviceGreeter { rpcsayHello (HelloRequest) returns (HelloReply) {} } messageHelloRequest { stringname=1; } messageHelloReply { stringmessage=1; }
生成的Service文件
// Generated by the protocol buffer compiler. DO NOT EDIT!// source: hello.protopackageio.grpc.examples.helloworld; publicinterfaceGreeter { publicHelloReplysayHello(HelloRequestreq); }
其它文件由原生protoc生成,无任何改变