编译器调用

注:内容翻译自官网文档 Compiler Invocation

当使用--java_out= 命令行标记时,protocol buffer编译器生成java输出。--java_out= 选项的参数是想编译器写java输出的目录。编译器为每个.proto文件输入创建一个单一的.java文件.这个文件包含一个单一的outer class定义,包含一些内嵌类和静态字段,基于.proto文件中的定义。

outer class的名字如下可选:如果.proto文件包含如下的一行:

option java_outer_classname = "Foo";

则outer class的名字将会是 Foo。否则,outer class名字通过转换.proto文件的基本名称为驼峰法来决定。例如,foo_bar.proto将变成FooBar。如果在文件中有相同名字的消息,"OuterClass"将被附加到outer class的名字后。例如,如果 foo_bar.proto 包含一个名为 FooBar 的消息,outer class将变成 FooBarOuterClass 。

Java package名字的选择在后面的 Packages 一节中描述。

通过连接参数到 --java_out= 来选择输出文件, package 名称(使用/替代.)和 .java 文件名。

因此,例如,如下调用编译器:

protoc --proto_path=src --java_out=build/gen src/foo.proto

如果 foo.proto 的java package是 com.example 并且它的outer class名称是 FooProtos,那么protocol buffer编译器将生成文件 build/gen/com/example/FooProtos.java。protocol buffer编译器在需要时将自动创建 build/gen/com 和 build/gen/com/example 目录。但是,它将不会创建 build/gen 或者 build 。他们必须已经存在。可以在一次调用中指定多个 .proto文件;所有输出文件将被一次性生成。

==当输出java代码时,protocol buffer编译器直接输出到jar包的能力是非常方便的,因为很多java工具可以直接从jar文件中读取源代码。要输出到jar文件,简单的提供以.jar结束的输出位置。注意,仅有java源代码被放置在包中;还是必须单独编译来生成java class文件==


书籍推荐