首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在其他proto文件中导入date.proto

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

Stack Overflow用户
提问于 2022-05-02 15:32:48
回答 2查看 1.2K关注 0票数 4

我对协议缓冲区很陌生。我有一些java pojo类,它有一个类型为Date的字段,仅包括年份、月份和日期。

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

但是对于日期类型,我们不能这样做,因为date.proto在https://github.com/googleapis/googleapis/blob/master/google/type/date.proto中。

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

EN

回答 2

Stack Overflow用户

发布于 2022-05-03 03:31:17

对于时间戳类型,我们可以导入“google/

/timestamp.proto”;

因为timestamp.proto是Protobuf中包含的一些内置消息类型。

,但是对于日期类型,我们不能这样做,因为date.proto在https://github.com/googleapis/googleapis/blob/master/google/type/date.proto中。

首先,您应该克隆整个项目,或者只是下载所需的任何file).

  • Secondly,文件(在本例中,date.protodate.proto放入您的项目中,您可以创建一个导入目录,例如:用protoc生成代码;您必须使用--proto_path命令行标志(又名-I)来告诉protoc在哪里查找< code >D20文件。如果不提供路径,默认情况下它将只搜索当前目录:

代码语言:javascript
运行
复制
protoc -I.  --cpp_out=. usersvr.proto

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

代码语言:javascript
运行
复制
╰─$ tree                                                                                
.
├── google
│   └── type
│       └── date.proto
├── usersvr.pb.cc
├── usersvr.pb.h
└── usersvr.proto

usersvr.proto:

代码语言:javascript
运行
复制
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下载的

票数 2
EN

Stack Overflow用户

发布于 2022-05-03 04:52:02

假设您的Gradle (或Maven)设置正常工作并生成代码,则必须将.proto文件复制到您的protobuf源文件中(例如:project/src/main/proto)。您只需要复制它(如果您只关心与Java一起使用它):

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
import com.google.type.Date;

在此之后,建议将com.google.type.Date的属性映射到用作日期的任何类型,最好不要直接存储com.google.type.Date生成的类型。这将使您对类型有更多的控制,而如果存储生成的类型,则不可能有与Java对象相同的自由度。

注意:如果您愿意直接使用Timestamp**,,有一些方法可以将它们转换为** Date

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72089009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档