在其他 proto 文件中导入 date.proto

Spa*_*222 6 java protocol-buffers

我是协议缓冲区的新手。我有一些 java pojo 类,它有一个 Date 类型的字段,仅包括年、月和日。

对于时间戳类型,我们可以import "google/protobuf/timestamp.proto";

但对于 Date 类型,我们不能这样做,因为 date.proto 位于https://github.com/googleapis/googleapis/blob/master/google/type/date.proto.

那么我该如何导入这个date.proto呢?

sam*_*ray 3

\n

对于时间戳类型,我们可以导入“google/protobuf/timestamp.proto”;。

\n
\n

因为timestamp.protoProtobuf中包含了一些内置的消息类型。

\n
\n

但对于 Date 类型,我们不能这样做,因为 date.proto 位于https://github.com/googleapis/googleapis/blob/master/google/type/date.proto

\n
\n
    \n
  1. 首先,您应该克隆整个项目或简单地下载proto您需要的任何文件(在本例中为date.proto文件)。
  2. \n
  3. 其次,放入date.proto你的项目中,你可以创建一个用于导入的目录,例如:google/type/date.proto
  4. \n
  5. 最后,用protoc;生成代码 您必须使用--proto_path命令行标志(又名-I)来告诉protoc在哪里寻找.proto文件。如果您不提供路径,默认情况下它将仅搜索当前目录:
  6. \n
\n
protoc -I.  --cpp_out=. usersvr.proto\n
Run Code Online (Sandbox Code Playgroud)\n

这是我的演示项目的结构:

\n
\xe2\x95\xb0\xe2\x94\x80$ tree                                                                                \n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 google\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 type\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 date.proto\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 usersvr.pb.cc\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 usersvr.pb.h\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 usersvr.proto\n
Run Code Online (Sandbox Code Playgroud)\n

usersvr.proto:

\n
syntax = "proto3";\npackage srv.user;\nimport "google/protobuf/timestamp.proto";\nimport "google/type/date.proto";\n\noption cc_generic_services = true;\nmessage BatchGetUserInfosRequest {\n  uint64 my_uid = 1;\n  repeated uint64 peer_uids = 2;\n  map<string, string> infos = 3;\n  google.protobuf.Timestamp timestamp = 4;\n  google.type.Date date = 5;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

date.proto从https://github.com/googleapis/googleapis/blob/master/google/type/date.proto下载

\n