需要从一份proto文件生成一份Java文件。
proto内容如下:
syntax = "proto2";
package netty;
option java_package = "com.backend.testNetty";
option java_outer_classname = "SubscribeReqProto";
message SubscribeReq{
required int32 subReqID = 1;
required string userName = 2;
required string productName = 3;
required string address = 4;
}
其中package的作用和java_package是一样的,用于在生成Java文件的,只是java_package一旦设置了就以它的包名为准,这个包名的作用就是,生成的Java文件会在com/backend/testNetty这个路径下面,这个路径就是根据这个包名自动生成的。
java_outer_classname 就是生成的Java文件的名称。
然后执行
protoc --proto_path=C:\Users\lawson\Desktop\netty\ --java_out=C:\Users\lawson\Desktop\src C:\Users\lawson\Desktop\netty\SubscribeResp.proto
protoc可以配置环境变量,也可以直接cd到它的执行文件目录。
–proto_path是指的proto文件所在路径,–java_out指输出路径,最后跟的一段是包含proto文件自身的路径
注意:
File does not reside within any path specified using --proto_path (or -I).
You must specify a --proto_path which encompasses this file.
Note that the proto_path must be an exact prefix of the .proto file names --
protoc is too dumb to figure out when two paths (e.g. absolute and relative)
are equivalent (it's harder than you think).
出现这个错误是因为没有在执行命令上提供–proto_path。
No syntax specified for the proto file: netty/SubscribeReq.proto.
Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
出现这个错误是因为没有指明syntax,需要在proto文件顶部添加syntax = “proto2”;