首页 > 编程语言 >JAVA使用Protobuf GRPC

JAVA使用Protobuf GRPC

时间:2023-08-22 16:13:43浏览次数:66  
标签:文件 插件 JAVA Protobuf proto GRPC maven java protobuf

  • IDEA安装Protobuf插件

  • 引入maven依赖
<dependency>
	<groupId>com.google.protobuf</groupId>
	<artifactId>protobuf-java</artifactId>
	<version>3.19.1</version>
</dependency>

protobuf是目前比较新的版本,之前测试过程中使用3.9.1。发现生成的源代码中,某些函数报错,调用不了,是因为函数在该版本声明为protected,其他地方调用不了。

  • maven中protobuf plugin
                       <plugin>
				<groupId>org.xolstice.maven.plugins</groupId>
				<artifactId>protobuf-maven-plugin</artifactId>
				<version>0.6.1</version>

				<configuration><!-- proto文件目录 -->
					<protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
					<!-- 生成的Java文件目录 -->
					<outputDirectory>${project.basedir}/src/main/java/</outputDirectory>
					<clearOutputDirectory>false</clearOutputDirectory>
					<!--<outputDirectory>${project.build.directory}/generated-sources/protobuf</outputDirectory>-->
				</configuration>
				<executions>
					<execution>
						<goals>
							<goal>compile</goal>
							<goal>test-compile</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

在maven中的build中的plugins中添加上面插件。

protoSourceRoot指定*.proto定义的消息文件路径。

outputDirectory指定输出的java文件地址。默认是输出到target中。

clearOutputDirectory是否清空输出文件,默认为是,如果是,outputDirectory下的项目工程会被清空

  • 定义消息文件
syntax = "proto3";

package protocol;

option go_package = "protocol";
option java_package = "com.kone.pbdemo.protocol";

message File {
  string name = 1;
  int32 size = 2;
}
  • 编译protobuf文件

可以查看文件输出

  • 测试
public class PbTest {
    public static void main(String[] args) {
        FileOuterClass.File file = FileOuterClass.File.newBuilder()
                .setName("fileName")
                .setSize(200)
                .build();
        System.out.println(file);
    }
}
  • proto文件导入插件显示问题

在*.proto文件中导入其他proto文件,提示未找到文件问题。

在Setting => Languates & Frameworks => Protocol Buffers中添加proto路径

找不到文件的提示就会消失:

标签:文件,插件,JAVA,Protobuf,proto,GRPC,maven,java,protobuf
From: https://www.cnblogs.com/xiondun/p/17648775.html

相关文章

  • java实现大文件上传实例解析
    ​  上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。一开始以为是session过期或者文件大小受系统限制,导致的错误。查看了系统的配置文件没有看到文件大小限制,web.xml中seesiontimeout是30,我把它改成了120。但还是不行,有时候10分钟就崩了。同事说,可能是客户这......
  • java中猜数字的小游戏
    importjava.util.Random;importjava.util.Scanner;publicclasscaishuzi{publicstaticvoidmain(String[]args){Randomrandom=newRandom();intmath=random.nextInt(100);Scannerscanner=newScanner(System.in);......
  • java-javaParse解析类的方法名称,行数等
    importcom.github.javaparser.JavaParser;importcom.github.javaparser.ast.CompilationUnit;importcom.github.javaparser.ast.PackageDeclaration;importcom.github.javaparser.ast.body.ClassOrInterfaceDeclaration;importcom.github.javaparser.ast.body.Method......
  • java怎么设置定时任务(通过Executors.newScheduledThreadPool(1)方法)
    importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.concurrent.Executors;importjava.util.concurrent.ScheduledExecutorService;importjava.util.concurrent.TimeUnit;publicclassdingshi{publicstaticvoidmain(String[]args)......
  • java实现大文件上传示例
    ​ 一、功能性需求与非功能性需求要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端......
  • Java8实现联合排序
    Comparator<MyObject>combined=Comparator.comparing(MyObject::getField1,Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(MyObject::getField2,Comparator.nullsLast(Comparator.naturalOrder())).thenComparing(MyObject::getF......
  • JAVA数组
    数组的定义1.数组的定义相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。2.数组的声明和创建变量类型变量名称=变量的值int[]numbers={1,2};intnumbers2[]={2,3};Java语言使用new操作符来创建数组,语法如下:int[]nu......
  • 【HarmonyOS】实现将pcm音频文件进行编码并写入文件(API6 Java)
     【关键字】音频编码、管道模式、createEncoder【写在前面】在使用API6开发HarmonyOS应用时,如何将pcm源文件进行编码并写入文件,最后生成aac文件,本文直接附上主要代码开发步骤供大家参考。【主要功能代码】importohos.media.codec.Codec;importohos.media.common.BufferInfo;im......
  • Java开发的一些小技巧
    编写清晰的代码注释:在关键地方添加合适的注释,使代码更易读、易懂。注释应该解释代码的用途、实现思路或者特殊考虑的地方,帮助其他人理解和维护代码。避免使用魔法数值:将常用的魔法数值定义为常量,以便于理解和维护代码。通过给常量起一个有意义的名称,可以提高代码的可读性和可维护性......
  • javascript学习笔记第五天
    今天的笔记functiongetusergradesum(arr=[])传递数组进入匿名函数,假设不确定数组是否会为空可以默认传一个空的数组进入,这样不会报错在匿名方法里面,return之后就直接结束函数了三元运算符好像不能同时使用两个return,例如i>l?returni:retuenl,这样子会报错return时......