为 .proto 文件设置正确的包名称

问题描述 投票:0回答:2

阅读 Google 协议缓冲区的文档后,我希望在我的客户端中实现它们,到目前为止我有以下内容:

package com.christopher.kade;
option java_package= "protocol";

message Protocol {
    required string keyword = 1;
    optional string value = 2;
    optional string type = 3;
}

但是生成时,该文件具有包“协议”,因此

IntellIJ
给了我以下错误:

包名“protocol”与文件路径“com.christopher.kade.protocol”不对应

请注意,如果我取消该选项,该插件会创建一个名为 com.christopher.kade

new
包。

我应该在我的

.proto
文件中添加什么才能获得正确的包名称?

protocol-buffers
2个回答
0
投票

我认为你应该在 package 和 java_package 中使用相同的完整包名称才能使其工作:

package com.christopher.kade.protocol;
option java_package= "com.christopher.kade.protocol";

0
投票

对于您的场景,只需删除 java_package 并使用 package。 如果未指定 java_package,java 绑定将默认为 proto 包。

package com.christopher.kade.protocol;

message Protocol {
    required string keyword = 1;
    optional string value = 2;
    optional string type = 3;
}

java_package的主要用途是在与proto包不同的包中生成java代码。也许您的原始包命名约定不遵循 java 约定,或者您可能在公司更名后更改了 java 包,但您不想更改网络上的包,这会破坏兼容性。

例如,您可以制作原型包

com.christopher.kade
,这就是您在任何其他 api 客户端中使用的包,同时将 java 代码生成为
com.christopher.kade.protocol

package com.christopher.kade;
option java_package= "com.christopher.kade.protocol";

message Protocol {
    required string keyword = 1;
    optional string value = 2;
    optional string type = 3;
}
© www.soinside.com 2019 - 2024. All rights reserved.