阅读 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
文件中添加什么才能获得正确的包名称?
我认为你应该在 package 和 java_package 中使用相同的完整包名称才能使其工作:
package com.christopher.kade.protocol;
option java_package= "com.christopher.kade.protocol";
对于您的场景,只需删除 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;
}