idea集成protobuf
idea安装protobuf插件
编写pom.xml
<protobuf-java.version>3.5.1</protobuf-java.version>
<protobuf-javanano.version>3.1.0</protobuf-javanano.version>
<!--先添加依赖包,我们选择生成javanano格式的代码,当然你也可以选择生成grpc格式的代码,javanano是protobuf-maven-plugin原生支持的,所有支持的原生的代码格式:java,avanano,js,csharp,cpp,python,descriptor-set-->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>${protobuf-java.version}</version>
</dependency>
<dependency>
<groupId>com.google.protobuf.nano</groupId>
<artifactId>protobuf-javanano</artifactId>
<version>${protobuf-javanano.version}</version>
</dependency>
<!--添加protobuf-maven-plugin-->
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.6.2</version>
</extension>
</extensions>
<plugins>
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<configuration>
<pluginId>java</pluginId>
<protocArtifact>com.google.protobuf:protoc:${protobuf-java.version}:exe:${os.detected.classifier}</protocArtifact>
<protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
<outputDirectory>${project.build.sourceDirectory}</outputDirectory>
<clearOutputDirectory>false</clearOutputDirectory>
</configuration>
<executions>
<execution>
<goals>
<goal>compile-javanano</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<build>
添加protobuf-maven-plugin,注意要设置下protoSourceRoot和outputDirectory和goal,protoSourceRoot代表proto源文件所在目录,outputDirectory代表生成的java文件的存放路径,我们把生成好的代码直接放在src目录下面, goal代表我们要用哪一个命令来生成java源文件。
编写proto文件,用idea插件生成源码
//Person.proto
syntax = "proto3";
option java_package = "com.github.xjs.protobuffdemo";
option java_outer_classname = "PersonProto";
message Person{
string name = 1;
int32 age = 2;
}
注意这里的java_package和java_outer_classname,java_package是说生成的java文件的包名,java_outer_classname是生成的java文件的类名。
此时,打开idea右边的maven的那个tab页面:
双击上图中的compile-javanano,就可以在 com.github.xjs.protobuffdemo.nano这个包下面生成PersonProto这个类。
测试
@Test
public void testPersonSerialize() throws Exception{
Person p = new Person();
p.setName("张三");
p.setAge(30);
byte[] bytes = ProtobuffUtil.toBytes(ProtobuffUtil.toNano(p, PersonProto.Person.class));
System.out.println("bytes.length:"+bytes.length);//10
p = ProtobuffUtil.toBean(ProtobuffUtil.fromBytes(bytes, PersonProto.Person.class), Person.class);
System.out.println(p.getName() + "," + p.getAge());
}
完成的代码下载:
https://github.com/xjs1919/enumdemo 下面的 protobuff-demo。