前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun
前言
我一直是在Win10本地编译Hudi包的,因为这样可以直接在IDEA里修改并调试源码,但是前段时间打包Hudi master代码时,发现在Win10 本地打包出现了异常,原因是这个PR:https://github.com/apache/hudi/pull/6135 引入了proto,需要使用protoc编译.proto
文件,使用的是maven的protoc-jar-maven-plugin,但是通过maven下载的protoc.exe有问题,所以打包失败。
具体异常
打包命令1
mvn clean package -DskipTests
异常信息
1 | protoc-jar: protoc version: 3.21.5, detected platform: windows-x86_64 (windows 10/amd64) |
异常原因
根据上面的异常信息可以看到,首先先找AppData\Local\Temp\protocjar.webcache\com\google\protobuf\protoc\3.21.5\protoc-3.21.5-windows-x86_64.exe,然后执行protoc.exe, –version,接着报错:文件或目录损坏且无法读取。就是因为maven自动下载的protoc-3.21.5-windows-x86_64.exe文件无法使用,我们手动点击鼠标执行这个exe也是一样的问题。而且我们即使把它删了再重新下载也不行。
解决方法
我之前因为着急打包,用了一个快速的方法,是通过注释掉根目录pom.xml中的hudi-utilities和hudi-kafka-connect相关的模块,这样打包时跳过错误的模块即可解决,另外还可以在Linux虚拟机上尝试解决。但是这样并不是长久之计,下面分享一下根本解决方法
下载protoc包
下载地址:https://github.com/protocolbuffers/protobuf/releases,要下载和Hudi pom中一致的版本,本次使用protoc-21.5-win64.zip:https://github.com/protocolbuffers/protobuf/releases/download/v21.5/protoc-21.5-win64.zip
下载完成后,解压,将protoc-21.5-win64\bin文件夹下面的protoc.exe
文件拷贝至上面报错的exe路径下,具体的路径为C:\Users\dongkelun01\AppData\Local\Temp\protocjar.webcache\com\google\protobuf\protoc\3.21.5,并且重命名为protoc-3.21.5-windows-x86_64.exe,也就是覆盖掉之前的有问题的exe。备注:通过配置环境变量path的方式不能解决问题。
重新打包
1 | mvn clean package -DskipTests |
这样在不修改源码的情况下就可以打包成功!一劳永逸。当然这也许并不是唯一的解决方式,不管何种方式,能解决问题就行~