【发布时间】:2022-06-11 15:43:36
【问题描述】:
我有一个带有嵌套类的原型定义
syntax = "proto3";
option java_package = "com.spot.proto.v1.config";
package v1config;
// ClusterConfig proto is used to maintain the params required by all the services at a central place.
message ClusterConfig {
enum LogLevel {
UNKNOWN_TYPE = 0;
DEBUG = 1;
INFO = 2;
WARN = 3;
ERROR = 4;
FATAL = 5;
}
message Network {
string ip = 1;
int32 port = 2;
}
message Constants {
message SlackNotifier {
message Channel {
string name = 1;
}
string auth_token = 1;
map<string, Channel> channels = 2;
bool is_enabled = 3;
}
message Kafka {
string broker_list = 1;
}
Kafka kafka = 2;
}
message Support {
Network network = 1;
}
Support support = 1;
...
}
当我使用option java_multiple_files = false; 生成Java 类时,它会创建一个Java 类ClusterConfigOuterClass.java,其中包含为嵌套在其中的顶级消息、服务和枚举生成的所有Java 类/枚举/等。这是意料之中的。
但是如果我使用option java_multiple_files = true;,那么我看到它会生成两个额外的类ClusterConfig.java、ClusterConfigOrBuilder.java 以及ClusterConfigOuterClass.java。 ClusteConfig.java 现在包含嵌套类。
文档状态如下:-
java_multiple_files(文件选项):如果为 false,则只有一个 .java 文件 将为这个 .proto 文件生成,所有的 Java 类/枚举/等。为顶级消息、服务和 枚举将嵌套在外部类中(参见 java_outer_classname)。如果为 true,将生成单独的 .java 文件 对于每个 Java 类/枚举/等。为顶层生成 消息、服务和枚举,以及包装 Java 类 为此 .proto 文件生成的文件不会包含任何嵌套 类/枚举/等。这是一个布尔选项,默认为 false。 如果不生成 Java 代码,则此选项无效。
那么每个嵌套消息(如Kafka、Network 等)不应该进入一个单独的 java 文件吗?
- Java 11
- 协议 - 3.10
【问题讨论】:
标签: java protocol-buffers java-11 proto protoc