SIGN IN SIGN UP
TarsCloud / Tars UNCLAIMED

Tars is a high-performance RPC framework based on name service and Tars protocol, also integrated administration platform, and implemented hosting-service via flexible schedule.

0 0 1 C++
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
```