当前位置: 首页 > 工具软件 > jprotobuf > 使用案例 >

jprotobuf打包采坑记

龙景澄
2023-12-01

jprotobuf打包采坑记

先上问题

用maven做构建工具,进行web服务器端应用的打包。报下面错误

Msg$$JProtoBufClass.java:15: 错误: 找不到符号

解决方法

在pom文件plugins中添加

	<plugin>
		<groupId>com.baidu</groupId>
		<artifactId>jprotobuf-precompile-plugin</artifactId>
		<version>1.2.8</version>
		<configuration>
			<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
			<filterClassPackage>com.程序中.proto的路径</filterClassPackage>
		</configuration>
		<executions>
			<execution>
				<phase>compile</phase>
				<goals>
					<goal>precompile</goal>
				</goals>
			</execution>
		</executions>
	</plugin>

在dependencies中添加

<!-- https://mvnrepository.com/artifact/com.baidu/jprotobuf-precompile-plugin -->
<dependency>
    <groupId>com.baidu</groupId>
    <artifactId>jprotobuf-precompile-plugin</artifactId>
    <version>1.2.8</version>
</dependency>

然后 mvn clean package -dmaven.test.skip true,一切都可以愉快的玩耍了。
感谢这个链接: https://github.com/jhunters/jprotobuf.

吐槽下自己

项目中用到了RPC通信,序列化方式采用protobuf,当初项目的基础框架是同事做的,猜想他做到一半才发现还有jprotobuf这个东东,于是临时替换了google的原生支持,但是proto文件都还留在项目里。我完全没注意序列化用了什么方式,业务代码写完准备打包交付的时候麻烦来了,只要涉及到对外TCP通信的服务怎么打包都报错。我尝试了运行环境统一、打包插件替换、jar包版本兼容测试,最后放弃治疗,把原本gradle构建的程序转成了maven,认为一定是自己对gradle不熟导致的。一顿折腾之后才决定看看别人写的框架到底采用了什么技术选型。然后,没到半个小时问题就解决了。原因就是遗留的proto文件导致通信实体没有编译。

浪费了大半天时间得到的教训是,再好的脚手架程序也是别人的,用之前先消化好。

 类似资料: