簡體   English   中英

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

[英]import date.proto in other proto file

我是協議緩沖區的新手。 我有一些 java pojo 類,它有一個 Date 類型的字段,僅包括年、月和日。

對於時間戳類型,我們可以import "google/protobuf/timestamp.proto"; .

但是對於 Date 類型,我們不能這樣做,因為 date.proto 在https://github.com/googleapis/googleapis/blob/master/google/type/date.proto中。

那么如何導入這個date.proto呢?

對於時間戳類型,我們可以導入“google/protobuf/timestamp.proto”;。

因為timestamp.proto是 Protobuf 中包含的某種內置消息類型。

但是對於 Date 類型,我們不能這樣做,因為 date.proto 在https://github.com/googleapis/googleapis/blob/master/google/type/date.proto中。

  1. 首先,您應該克隆整個項目或簡單地下載您需要的任何proto文件(在本例中為date.proto文件)。
  2. 其次,將date.proto放到你的項目中,你可以創建一個目錄用於導入,例如: google/type/date.proto
  3. 最后,使用protoc生成代碼; 您必須使用--proto_path命令行標志(又名-I )告訴protoc在哪里查找.proto文件。 如果您不提供路徑,默認情況下它只會搜索當前目錄:
protoc -I.  --cpp_out=. usersvr.proto

這是我的演示項目的結構:

╰─$ tree                                                                                
.
├── google
│   └── type
│       └── date.proto
├── usersvr.pb.cc
├── usersvr.pb.h
└── usersvr.proto

usersvr.proto:

syntax = "proto3";
package srv.user;
import "google/protobuf/timestamp.proto";
import "google/type/date.proto";

option cc_generic_services = true;
message BatchGetUserInfosRequest {
  uint64 my_uid = 1;
  repeated uint64 peer_uids = 2;
  map<string, string> infos = 3;
  google.protobuf.Timestamp timestamp = 4;
  google.type.Date date = 5;
}

date.protohttps://github.com/googleapis/googleapis/blob/master/google/type/date.proto下載

假設您的 Gradle(或 Maven)設置正常工作並生成代碼,您必須將 .proto 文件復制到您的 protobuf 源文件中(例如: project/src/main/proto )。 您只需要復制它(如果您只關心在 Java 中使用它):

syntax = "proto3";

package google.type;

option java_multiple_files = true;
option java_outer_classname = "DateProto";
option java_package = "com.google.type";

message Date {
  int32 year = 1;
  int32 month = 2;
  int32 day = 3;
}

然后,您將使用 Gradle 任務(或 maven)生成 Java 代碼,並且您將可以訪問Date ,方法是像這樣導入:

import com.google.type.Date;

之后,建議將com.google.type.Date的屬性映射到您用作 Date 的任何類型,最好不要直接存儲com.google.type.Date生成的類型。 這將使您可以更好地控制您的類型,而如果您存儲生成的類型,您將無法擁有與 Java 對象相同的自由度。

注意:如果您願意直接使用Timestamp ,有辦法將它們轉換為Date

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM