支持proto3
安装 protoc-gen-doc
简单遵循安装要求即可:
https://github.com/estan/protoc-gen-doc#installation
安装完成之后的protoc是2.5.0版本,无法处理proto3的文件。因此我们需要升级替换protoc为v3.0.0版本。
升级protoc
使用预编译版本
下载
请先在 protobuf 的 发布页面 中找到对应版本的 download ,然后下载对应版本的 protoc, 如 v3.0.0的 linux 64位版本:
清理
如果之前有安装过 protoc 的老版本,如2.5.0版本,则需要在安装前删除旧有版本的protoc和include文件,操作如下:
$ protoc --version libprotoc 2.5.0 # 上面老版本是 2.5.0,需要删除 which protoc /usr/bin/protoc # 删除 protoc sudo rm /usr/bin/protoc # 删除默认的include文件 sudo rm -rf /usr/include/google/protobuf/
安装
解压缩得到的zip文件,然后执行下面的操作,复制protoc和include文件:
mkdir temp mv protoc-3.0.0-linux-x86_64.zip temp cd temp unzip protoc-3.0.0-linux-x86_64.zip
输出如下(直接解压缩到当前目录,所以解压前最好准备一个临时目录,如上面shell命令中的temp目录):
Archive: protoc-3.0.0-linux-x86_64.zip creating: include/ creating: include/google/ creating: include/google/protobuf/ inflating: include/google/protobuf/struct.proto inflating: include/google/protobuf/type.proto inflating: include/google/protobuf/descriptor.proto inflating: include/google/protobuf/api.proto inflating: include/google/protobuf/empty.proto creating: include/google/protobuf/compiler/ inflating: include/google/protobuf/compiler/plugin.proto inflating: include/google/protobuf/any.proto inflating: include/google/protobuf/field_mask.proto inflating: include/google/protobuf/wrappers.proto inflating: include/google/protobuf/timestamp.proto inflating: include/google/protobuf/duration.proto inflating: include/google/protobuf/source_context.proto creating: bin/ inflating: bin/protoc inflating: readme.txt
开始复制文件并修改文件权限为755:
# 复制protoc文件 sudo cp bin/protoc /usr/bin/ sudo chmod 755 /usr/bin/protoc # 复制include文件 sudo cp -r include/google/protobuf/ /usr/include/google/ sudo chmod -R 755 /usr/include/google/protobuf
生成文档
参考 protoc-gen-doc 的使用说明:
https://github.com/estan/protoc-gen-doc#invoking-the-plugin
注意:存放生成文件的目录必须预先建立,否则会报错。
// 我们的proto文件在这里
cd contract/src/main/proto
// 准备生成HTML文件,并放置在target/contract-doc目录下
mkdir ../../../target/contract-doc
protoc --doc_out=html,index.html:../../../target/contract-doc userService.proto
解决 import 问题
执行 protoc 时,如果 userService.proto 还 import 了 google/protobuf
之外的其他的 .proto 文件,则会因为无法找到需要的 import 文件而报错。
有三种方式解决:
- 直接将要import的proto文件复制到当前目录,保证路径正确
将需要import的proto文件复制到
/usr/include/
目录sudo cp -r dolphin/ /usr/include/ sudo chmod -R 755 /usr/include/dolphin/
使用
--proto_path=PATH
在 protoc 的命令行参数中添加import的路径,而且这个选项可以使用多次
总结
现在至少可以用了,可以得到生成的HTML文件,虽然还有很多不足,后续再更新。
后续工作
后面就可以考虑:
- 在jenkins上建立上述环境
- 然后添加job来为各个项目的contract文件生成HTML文档
- 再将生成的文档统一发布到nginx之类的服务器下
这样就可以实现一个简单的文档中心,用于各个服务API文档的统一维护和发布。