Skip to content

bsoa/protoc-gen-bsoa-java

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";
    
    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;
    }
  2. 生成的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);
    }
  3. 其它文件由原生protoc生成,无任何改变