ProtoBuf的官方下载包并不包含jar文件,需要用户自己来自行编译。
下载
protobuf-2.5.0.tar.gz
(ProtoBuf的源文件(包含了C++/Java/Python)的源文件)
protoc-2.5.0-win32.zip
(已经编译过的用于Windows平台的protoc命令,该命令用于将.proto文件转化为Java或C++源文件)
注意,以上两个文件的版本必须匹配一致
分别解析这两个文件,你可以在protoc-2.4.1-win32.zip解压后的文件中找到一个protoc.exe文件,将其copy到protobuf-2.5.0/src目录下,然后进入protobuf-2.5.0/java
mvn install
如果没有安装maven的话,可以参考这篇文章:
Linux/Windows下安装Maven
编译完成后可以在protobuf-2.5.0/java/target目录中找到protobuf-2.5.0.jar文件
如果要生成plugin.java文件在\java\target\generated-sources\com\google\protobuf\compiler\PluginProtos.java,则需要修改\java\pom.xml里添加这样一行
<tasks>
<mkdir dir="target/generated-sources" />
<exec executable="../src/protoc">
<arg value="--java_out=target/generated-sources" />
<arg value="--proto_path=../src" />
<arg value="../src/google/protobuf/descriptor.proto" />
<arg value="../src/google/protobuf/compiler/plugin.proto" />
</exec>
</tasks>
把protobuf-2.5.0.jar,protoc.exe,PluginProtos.java 替换到自动生成代码的工具里,升级完成。
option optimize_for = LITE_RUNTIME;
optimize_for是文件级别的选项,Protocol Buffer定义三种优化级别SPEED/CODE_SIZE/LITE_RUNTIME。缺省情况下是SPEED。
SPEED: 表示生成的代码运行效率高,但是由此生成的代码编译后会占用更多的空间。
CODE_SIZE: 和SPEED恰恰相反,代码运行效率较低,但是由此生成的代码编译后会占用更少的空间,通常用于资源有限的平台,如Mobile。
LITE_RUNTIME: 生成的代码执行效率高,同时生成代码编译后的所占用的空间也是非常少。这是以牺牲Protocol Buffer提供的反射功能为代价的。因此我们在C++中链接Protocol Buffer库时仅需链接libprotobuf-lite,而非libprotobuf。在Java中仅需包含protobuf-java-2.4.1-lite.jar,而非protobuf-java-2.4.1.jar。
注:对于LITE_MESSAGE选项而言,其生成的代码均将继承自MessageLite,而非Message。