[英]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中。
proto
文件(在本例中為date.proto
文件)。date.proto
放到你的項目中,你可以創建一個目錄用於導入,例如: google/type/date.proto
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.proto
從https://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.