protobuf跨包import
在protobuf中,若要import不同package的proto文件,在不同语言中处理方式是不一样的。
Golang
首先,因为protobuf中的import,在编译到go时也会变成go的import,所以protobuf的编译路径也必须与go的编译路径相同。
以单一GOPATH变量为例,若go/src/a/b/c.proto要引用go/src/d/e/f.proto,则在c.proto中这样写import:
import "d/e/f.proto"
然后要编译c.proto时,则进入go/src/a/b目录下,给protoc命令加上-I参数后编译:
protoc -I "./" -I "../../" --go_out=./ f.proto
这样得到的pb.go文件的import语句就没问题了
Java
在java中,以maven项目为例,按grpc官方文档给pom.xml加上compile插件后,插件默认以src/main/proto作为protobuf编译的根路径,继续以上文的文件为例,则需要将文件按以下目录摆放即可自动完成编译:
src
|_main
|_proto
|_a
| |_b
| |_c.proto
|_d
|_e
|_f.proto