gpt4 book ai didi

java - 无法导入内包中的 Protobuf 消息

转载 作者:行者123 更新时间:2023-11-30 07:04:36 25 4
gpt4 key购买 nike

我正在尝试为原型(prototype)消息生成 Java 代码,该消息引用了更深层包中的另一条消息。生成类时,protoc失败并显示以下消息:

"<message_name> is not defined."

在哪里<message_name>是更深层包中引用消息的名称。为简单起见,我制作了以下测试目录结构:

prototest
- protos
- outer.proto
- inner
- inner.proto
- output

在哪里inner.proto是:

package protos.inner;

option java_package = "com.package.name.protos.inner";
option java_outer_classname = "InnerProto";

message Inner {
optional string msg = 1;
}

outer.proto是:

package protos;

option java_package = "com.package.name.protos";
option java_outer_classname = "OuterProto";

import "protos/inner/inner.proto";

message Outer {
optional Inner inner = 1;
}

这样Outer消息引用了 Inner信息。反向操作似乎工作正常(从 Outer 消息中引用 Inner),但我无法弄清楚为什么另一个方向不起作用。

我用来生成 outer.proto 的命令是:

protoc \
--proto_path=$PROTOTEST \
--java_out=$PROTOTEST/output \
$PROTOTEST/protos/outer.proto

在哪里$PROTOTEST是prototest目录的绝对路径。

最佳答案

看看this question ,虽然问题不同,但答案是一样的。 protobuf 导入不像 Java 导入,更像是 C 导入/Cobol 复制等。一种选择是在使用 Inner 时包含包层次结构。

尝试改变

optional Inner inner = 1;

optional protos.inner.Inner inner = 1;

您可能知道您需要编译这两个消息

protoc --proto_path=$PROTOTEST --java_out=$PROTOTEST/output $PROTOTEST/protos/outer.proto

protoc --proto_path=$PROTOTEST --java_out=$PROTOTEST/output $PROTOTEST/protos/inner/inner.proto

关于java - 无法导入内包中的 Protobuf 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27516535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com