gun*_*nar 6 java android protocol-buffers maven
我正在尝试使用protobuf nano从proto文件下面生成java文件.我得到了一些关于如何继续这个SO线程的基本指令.
我有这个原型文件,personal.proto:
package tutorial;
option java_package = "com.example.tutorial";
option java_outer_classname = "AddressBookProtos";
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
message AddressBook {
repeated Person person = 1;
}
Run Code Online (Sandbox Code Playgroud)
我试着按照这里的说明,更具体地说是NANO版本:
protobuf-2.5.0.zip和编译.protoc-2.5.0-win32.zipprotobuf-2.5.0.zip到一个文件夹,然后在src子文件夹中解压缩protoc.exe.java文件夹并在那里发出:mvn clean package -P nano.那个命令运行正常,target我在文件夹中protobuf-java-2.5.0.jar从这里我不知道如何继续,因为在初始文档中我有这样的声明:
- Link with the generated jar file
<protobuf-root>java/target/protobuf-java-2.3.0-nano.jar.
Run Code Online (Sandbox Code Playgroud)
我不确定这意味着什么,如何链接?是否有一些参数protoc.exe指定要使用的jar文件?
我试着发出这个命令: protoc --javanano_out=enum_style=java --java_out=generated personal.proto
但我得到这个错误:--javanano_out: protoc-gen-javanano: The system cannot find the file specified.
问题是:上面我错过了什么/做错了什么?我试图从proto文件上面生成java文件.
我认为这protoc不是通过javanano支持编译的.
预编译的windows版本2.5.0不包括nano支持,看看源代码,在" src\google\protobuf\compiler"路径中,包括java生成器,但不包括javanano生成器.谷歌存储库的最新源代码包括javanano.
您可以下载最新的源代码并尝试使用MinGW和msys或CygWin编译它,看一下这篇文章如何在Windows中构建谷歌协议缓冲区用于mingw?
(稍后我将发布建设过程的详细信息)
更新:
构建后的最终命令行 protoc.exe
对于一个原型文件
protoc --javanano_out=store_unknown_fields=true:target/generated-sources personal.proto, target/generated-sources
Run Code Online (Sandbox Code Playgroud)
对于多个原型文件
protoc --javanano_out=store_unknown_fields=true:target/generated-sources --proto_path=inputpath input/*.proto
Run Code Online (Sandbox Code Playgroud)
编辑 Nano生成器用public static final int字段替换枚举成员.如果类具有可选的枚举成员,则会出现问题,因为该成员将被编译为原始int值并将采用默认值零,这将是枚举中的第一个元素.为了区分未设置枚举值的情况,可以利用optional_field_style将生成的参数java.lang.Integer而不是原始int.解析proto时,调用者可以在使用该值之前检查该值是否为null.Null表示未设置值.
上面的调用脚本可以变成:
protoc --javanano_out=store_unknown_fields=true,optional_field_style=reftypes:target/generated-sources --proto_path=input input/*.proto
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7070 次 |
| 最近记录: |