2017-10-17 14:08:16 +08:00
tars Java Codegen Plugin for Protobuf
==============================================
插件可以和`protoc` 一起生成`.proto` 文件定义的接口;
需要自己编译;
**插件编译需要依赖Protobuf **
``` shell
export PROTOBUF_HOME = 'protobuf安装目录'
export CXXFLAGS = '-I$PROTOBUF_HOME/src" LDFLAGS="-L$PROTOBUF_HOME/src/.libs'
```
## System requirement
* Linux、 Mac OS X with Clang
* Java 7 or up
* [Protobuf ](https://github.com/google/protobuf ) 3.0.0-beta-3 or up
## Compiling and testing the codegen
[protobuf ](https://github.com/google/protobuf )的编译
``` shell
git clone https://github.com/google/protobuf.git
./autogen.sh
./configure
make
export PROTOBUF_HOME = ` pwd `
```
插件的编译
``` shell
git clone git@github.com:scguoi/pb-tars-service-generate-plugin.git
cd pb-tars-service-generate-plugin
export CXXFLAGS = " -I $PROTOBUF_HOME /src " LDFLAGS = " -L $PROTOBUF_HOME /src/.libs "
./gradlew java_pluginExecutable
```
## Usage
### Mac
#### 单文件
``` shell
export DYLD_LIBRARY_PATH = $DYLD_LIBRARY_PATH :$PROTOBUF_HOME /src/.libs
cd usage/single
$PROTOBUF_HOME /src/.libs/protoc --plugin= protoc-gen-tars-java= ../../build/exe/java_plugin/protoc-gen-tars-java --tars-java_out= ./ --java_out= ./ flight.proto
```
查看生成结果:
``` shell
➜ single git:( master) ✗ ll com/iflytek/grpc/flight
total 96K
-rw-r--r-- 1 scguo staff 79K Oct 10 14:30 Flight.java
-rw-r--r-- 1 scguo staff 749 Oct 10 14:30 FlightServicePrx.java
-rw-r--r-- 1 scguo staff 397 Oct 10 14:30 FlightServicePrxCallback.java
-rw-r--r-- 1 scguo staff 490 Oct 10 14:30 FlightServiceServant.java
-rw-r--r-- 1 scguo staff 1.8K Oct 10 14:30 ProtoCodec.java
```
#### 多文件
``` shell
export DYLD_LIBRARY_PATH = $DYLD_LIBRARY_PATH :$PROTOBUF_HOME /src/.libs
cd usage/multi
$PROTOBUF_HOME /src/.libs/protoc --java_out= ./ base.proto
$PROTOBUF_HOME /src/.libs/protoc --plugin= protoc-gen-tars-java= ../../build/exe/java_plugin/protoc-gen-tars-java --tars-java_out= ./ --java_out= ./ service.proto
```
查看生成结果:
``` shell
➜ multi git:( master) ✗ ll com/iflytek/grpc/flight/dto
total 68K
-rw-r--r-- 1 scguo staff 66K Oct 10 14:42 Base.java
➜ multi git:( master) ✗ ll com/iflytek/grpc/flight/service
total 32K
-rw-r--r-- 1 scguo staff 769 Oct 10 14:43 FlightServicePrx.java
-rw-r--r-- 1 scguo staff 409 Oct 10 14:43 FlightServicePrxCallback.java
-rw-r--r-- 1 scguo staff 506 Oct 10 14:43 FlightServiceServant.java
-rw-r--r-- 1 scguo staff 1.8K Oct 10 14:43 ProtoCodec.java
```
### Linux
#### 单文件
``` shell
export LD_LIBRARY_PATH = " $PROTOBUF_HOME /src/.libs "
cd usage/single
$PROTOBUF_HOME /src/.libs/protoc --plugin= protoc-gen-tars-java= ../../build/exe/java_plugin/protoc-gen-tars-java --tars-java_out= ./ flight.proto
```
产看生成的结果:
``` shell
H0045170 : ➜ single ll com/iflytek/grpc/flight/
总用量 96
-rw-r--r-- 1 root root 81040 10月 10 14:47 Flight.java
-rw-r--r-- 1 root root 397 10月 10 14:47 FlightServicePrxCallback.java
-rw-r--r-- 1 root root 749 10月 10 14:47 FlightServicePrx.java
-rw-r--r-- 1 root root 490 10月 10 14:47 FlightServiceServant.java
-rw-r--r-- 1 root root 1820 10月 10 14:47 ProtoCodec.java
```
#### 多文件
``` shell
export LD_LIBRARY_PATH = " $PROTOBUF_HOME /src/.libs "
cd usage/multi
$PROTOBUF_HOME /src/.libs/protoc --java_out= ./ base.proto
$PROTOBUF_HOME /src/.libs/protoc --plugin= protoc-gen-tars-java= ../../build/exe/java_plugin/protoc-gen-tars-java --tars-java_out= ./ service.proto
```
查看生成结果:
``` shell
H0045170 : ➜ multi ll com/iflytek/grpc/flight/dto
总用量 68
-rw-r--r-- 1 root root 67409 10月 10 14:48 Base.java
H0045170 : ➜ multi ll com/iflytek/grpc/flight/service
总用量 32
-rw-r--r-- 1 root root 409 10月 10 14:49 FlightServicePrxCallback.java
-rw-r--r-- 1 root root 769 10月 10 14:49 FlightServicePrx.java
-rw-r--r-- 1 root root 506 10月 10 14:49 FlightServiceServant.java
-rw-r--r-- 1 root root 1828 10月 10 14:49 ProtoCodec.java
```
## 可能的问题
1、编译找不到-lstdc++
``` shell
/bin/ld: cannot find -lstdc++
collect2: 错误: ld 返回 1
```
``` shell
yum install libstdc++-static.x86_64
```