Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

2 Commits

Repository files navigation

protoc-gen-bsoa-java

Generate protobuf service interface of Java.

在protoc解析protobuf文件生成代码的时候, 是不会解析里面的service生成接口文件的,只会解析message生成参数类。 所以需要一个第三方插件生成接口类

开发环境安装

Mac OS X

  1. 安装protoc
    https://github.com/google/protobuf/releases/
    下载对应的最新版的 protoc-osx包,解压即可。
    可以选择将bin加入到环境变量PATH中。

  2. 安装brew

    $ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
    $ brew -v
  3. 重新安装python(覆盖系统自带的)

    $ brew install python
    $ python -v
  4. 安装python包管理工具pip

    $ sudo easy_install pip
    $ pip -V
  5. 安装python的protobuf包

    $ pip install protobuf
    $ pip freeze

Windows

  1. 安装protoc
    https://github.com/google/protobuf/releases/
    下载对应的最新版的 protoc-win包,解压即可。
    可以选择将bin加入到环境变量PATH中。

  2. 安装python
    https://www.python.org/downloads/下载2.x版本;
    例如:https://www.python.org/ftp/python/2.7.13/python-2.7.13.msi;
    直接安装,例如安装目录$PYTHON_HOMEC:\Python27

  3. 设置环境变量。将$PYTHON_HOME加入PATH中。

    $ python -v
  4. 安装python包管理工具piphttps://pypi.python.org/pypi/pip#downloads下载压缩包;
    解压到临时文件夹下,执行$ python setup.py install 进行安装;
    安装路径默认是 $PYTHON_HOME\Scripts,例如C:\Python27\Scripts 同样将这个路径加入到PATH中。

    $ pip -V
  5. 安装python的protobuf包

    $ pip install protobuf
    $ pip freeze

编译说明

使用pyinstaller进行编译为exe文件进行发布。

Mac OS X

  1. 安装python的pyinstaller

    $ pip install pyinstaller
    $ pip freeze
  2. 修改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__)
  3. 到工程的根目录下。执行:

    pyinstaller -F protoc-gen-bsoa-java.py -n protoc-gen-bsoa-java-1.0.0-osx-x86_64.exe

    会生成builddist文件夹。
    dist文件夹里的protoc-gen-bsoa-java-1.0.0-osx-x86_64.exe就是可以独立运行的exe。

Windows

  1. 安装python的pyinstaller(同时会自动安装pypiwin32)

    $ pip install pyinstaller
    $ pip freeze
  2. 修改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__)
  3. 到工程的根目录下。执行:

    $ pyinstaller -F protoc-gen-bsoa-java.py -n protoc-gen-bsoa-java-1.0.0-windows-x86_64.exe

会生成builddist文件夹。
dist文件夹里的protoc-gen-bsoa-java-1.0.0-windows-x86_64.exe就是可以独立运行的exe。

使用plugin

Mac OS X

# 自己指定地址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

Windows

# 自己指定地址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

结果示例

  1. proto文件

    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;
    }
  2. 生成的Service文件

    // Generated by the protocol buffer compiler. DO NOT EDIT!// source: hello.protopackageio.grpc.examples.helloworld;
    publicinterfaceGreeter {
    publicHelloReplysayHello(HelloRequestreq);
    }
  3. 其它文件由原生protoc生成,无任何改变

About

Generate protobuf service interface of Java.

Topics

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages