Mac安装使用Protobuf


1、下载安装包

protobuf下载地址

目前最新版本protobuf-java-3.21.5.tar.gz

2、安装

tar -xzvf protobuf-java-3.21.5.tar.gz
cd protobuf-3.21.5
./configure
make
make check
sudo make install

3、验证

which protoc
protoc --version

4、idea使用proto

4.1、配置pom

<dependencies>
  <dependency>
    <groupId>com.google.protobuf</groupId>
    <artifactId>protobuf-java</artifactId>
    <version>3.21.5</version>
  </dependency>
</dependencies>
<build>
  <plugins>
    <plugin>
      <groupId>org.xolstice.maven.plugins</groupId>
      <artifactId>protobuf-maven-plugin</artifactId>
      <version>0.6.1</version>
      <configuration>
        <!--proto 文件目录-->
        <protoSourceRoot>${project.basedir}/src/main/resources/demo</protoSourceRoot>
        <!--编译后文件的输出的目录-->
        <outputDirectory>${project.build.sourceDirectory}</outputDirectory>
        <!--设置是否在生成java文件之前清空outputDirectory的文件,默认值为true-->
        <clearOutputDirectory>false</clearOutputDirectory>
      </configuration>
    </plugin>
  </plugins>
</build>

4.2、proto文件

//定义的是protobuf中使用的syntax协议,默认情况下是proto2,因为目前最新的协议是proto3
syntax = "proto3";
//package是指编译的时候生成文件的包。这是一个命名空间,虽然我们在后面定义了java_package,但是为了和非java语言中的协议相冲突
package com.nile;
//java_multiple_files指编译过后java文件的个数,默认是false
//如果是true,那么将会一个java对象一个类,如果是false,那么定义的java对象将会被包含在同一个文件中。
option java_multiple_files = false;
//java_package指定生成的类应该使用的Java包名称。 如果没有明确的指定,则会使用之前定义的package的值。
option java_package = "com.nile.protos";
//java_outer_classname选项定义将表示此文件的包装类的类名。
// 如果没有给java_outer_classname赋值,它将通过将文件名转换为大写驼峰来生成。
// 例如,默认情况下,“msg.proto”将使用”Msg”作为包装类名称。
option java_outer_classname = "MsgProto";

//消息的定义,对于简单类型来说可以使用bool, int32, float, double, 和 string来定义字段的类型。
message Msg {
  uint32 id = 1;
  optional string content = 2;
}
//字段的修饰符,有三个修饰符分别是optional,repeated和required。
//
//optional表示该字段是可选的,可以设置也可以不设置,如果没有设置,则会使使用默认值,对于简单类型来说,我们可以自定义默认值,如果不自定义,就会使用系统的默认值。对于系统的默认值来说,数字为0,字符串为空字符串,布尔值为false。
//
//repeated表示该字段是可以重复的,这种重复实际上就是一种数组的结构。
//
//required表示该字段是必须的,如果该字段没有值,那么该字段将会被认为是没有初始化,尝试构建未初始化的消息将抛出 RuntimeException,解析未初始化的消息将抛出 IOException。

//在Proto3中不支持required字段。

4.3、编译生成java类

img

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/java/281843.html

(0)
上一篇 2022年8月23日 15:54
下一篇 2022年8月23日 15:54

相关推荐

发表回复

登录后才能评论