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.proto
-
proto文件
syntax = "proto3"; option java_multiple_files = true; option java_package = "io.grpc.examples.helloworld"; option java_outer_classname = "HelloWorldProto"; package helloworld; service Greeter { rpc sayHello (HelloRequest) returns (HelloReply) {} } message HelloRequest { string name = 1; } message HelloReply { string message = 1; }
-
生成的Service文件
// Generated by the protocol buffer compiler. DO NOT EDIT! // source: hello.proto package io.grpc.examples.helloworld; public interface Greeter { public HelloReply sayHello(HelloRequest req); }
-
其它文件由原生protoc生成,无任何改变