protobuf的github:
GitHub - protocolbuffers/protobuf: Protocol Buffers - Google's data interchange format
按照其md介绍所说,想要直接使用的话,可以使用pre-built版本的执行文件:
点击链接进去,还是按照上边截图的说法找到对应平台的版本的zip包即可'protoc-$VERSION-$PALATFORM.zip',比如:

下载解压即可,会有个exe执行文件:

接下来是编写protobuf,详细如何编写不介绍,感兴趣的同学去官方看一下,这里粘贴处java-vector-tile包的一个protobuf(其中的package名称修改为了'jffffff',用于做测试的):
- package jffffff;
-
- message Tile {
-
- // GeomType is described in section 4.3.4 of the specification
- enum GeomType {
- UNKNOWN = 0;
- POINT = 1;
- LINESTRING = 2;
- POLYGON = 3;
- }
-
- // Variant type encoding
- // The use of values is described in section 4.1 of the specification
- message Value {
- // Exactly one of these values must be present in a valid message
- optional string string_value = 1;
- optional float float_value = 2;
- optional double double_value = 3;
- optional int64 int_value = 4;
- optional uint64 uint_value = 5;
- optional sint64 sint_value = 6;
- optional bool bool_value = 7;
-
- extensions 8 to max;
- }
-
- // Features are described in section 4.2 of the specification
- message Feature {
- optional uint64 id = 1 [ default = 0 ];
-
- // Tags of this feature are encoded as repeated pairs of
- // integers.
- // A detailed description of tags is located in sections
- // 4.2 and 4.4 of the specification
- repeated uint32 tags = 2 [ packed = true ];
-
- // The type of geometry stored in this feature.
- optional GeomType type = 3 [ default = UNKNOWN ];
-
- // Contains a stream of commands and parameters (vertices).
- // A detailed description on geometry encoding is located in
- // section 4.3 of the specification.
- repeated uint32 geometry = 4 [ packed = true ];
- }
-
- // Layers are described in section 4.1 of the specification
- message Layer {
- // Any compliant implementation must first read the version
- // number encoded in this message and choose the correct
- // implementation for this version number before proceeding to
- // decode other parts of this message.
- required uint32 version = 15 [ default = 1 ];
-
- required string name = 1;
-
- // The actual features in this tile.
- repeated Feature features = 2;
-
- // Dictionary encoding for keys
- repeated string keys = 3;
-
- // Dictionary encoding for values
- repeated Value values = 4;
-
- // Although this is an "optional" field it is required by the specification.
- // See https://github.com/mapbox/vector-tile-spec/issues/47
- optional uint32 extent = 5 [ default = 4096 ];
-
- extensions 16 to max;
- }
-
- repeated Layer layers = 3;
-
- extensions 16 to 8191;
- }
(我的protoc版本为:protoc-21.0-win64)
接下来,进入到proto的目录,在当前位置开启cmd窗口,并新建'qwe'目录。
输入命令($protoc_path --java_out=${your_java_package_dir} ${proto_file}):
E:\protoc-21.0-win64\bin\protoc --java_out=qwe/ 1.proto
生成结果:

1. 这里编写一个输出java到绝对路径的方式(cmd在1.proto目录下):
E:\protoc-21.0-win64\bin\protoc --java_out=G:\tes\eee 1.proto
2. 再写一个proto位置为相对路径的(cmd在eee目录下):
- # 这两个都可以
- E:\protoc-21.0-win64\bin\protoc --java_out=G:\tes\eee eee/1.proto
-
- E:\protoc-21.0-win64\bin\protoc --java_out=G:\tes\eee eee\1.proto
3. 这样报错:
- G:\tes>E:\protoc-21.0-win64\bin\protoc --java_out=G:\tes\eee --proto_path=G:\tes\eee\1.proto
- Missing input file.
4.