前面测试完了protobuf的c++tutorial,接着测试一下java tutorial,已经ant的build.xml文件编写。
根据./proto/目录下的addressbook.proto( 内容请参考tutorial)生成.java文件,放到./java/src目录下
$ protoc -I=./proto --java_out=./java/src ./proto/addressbook.proto
在 ./java/src 目录下
$ cd ./java/src
编写Reader.java 和 Writer.java( 内容请参考tutorial )
在.java/目录下,编写build.xml文件,关于build.xml的编写,请参考这里
$ cd ..
$ cat build.xml
<project name="ProtoTest" basedir="." default="main">
<property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="lib.dir" value="lib"/>
<path id="classpath">
<fileset dir="${lib.dir}" includes="**/*.jar"/>
</path>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
<target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
</target>
<target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
</jar>
</target>
<target name="clean-build" depends="clean,jar"/>
</project>
生成ProtoTest.jar
$ant jar
测试 ListPeople和AddPerson类
$ java -classpath ./build/jar/ProtoTest.jar:./lib/protobuf-java-2.4.1.jar AddPerson address.txt Enter person ID number: 01 Enter name: donal Enter email address (blank for none): donal0412@gmail.com Enter a phone number (or leave blank to finish): 88236017 Is this a mobile, home, or work phone? work Enter a phone number (or leave blank to finish):
$ java -classpath ./build/jar/ProtoTest.jar:./lib/protobuf-java-2.4.1.jar ListPeople address.txt Person ID: 1 Name: donal E-mail address: donal0412@gmail.com Work phone #: 88236017
测试java和c++程序通过文件通信
$ java -classpath ./build/jar/ProtoTest.jar:./lib/protobuf-java-2.4.1.jar ListPeople ../cpp/address.txt Person ID: 1 Name: donal E-mail address: donal0412@gmail.com Work phone #: 88236017
$ ../cpp/reader address.txt Person ID: 1 Name: donal E-mail address: donal0412@gmail.com Work phone #: 88236017