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,注意要设置下protoSourceRootoutputDirectorygoal,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_packagejava_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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值