Ubuntu环境下Maven编译Velox时Protobuf导入错误求助
解决Protobuf导入
google/protobuf/any.proto找不到的问题 问题场景
在Ubuntu机器上执行以下Maven构建命令时:
mvn clean package -DskipTests -Dcheckstyle.skip -Pbackends-velox -Dbuild_protobuf=OFF -Dbuild_cpp=ON -Dbuild_velox=On -Dvelox_home=${VELOX_HOME} -Dbuild_arrow=OFF -Dcompile_velox=ON
触发Protobuf导入错误:
spark311_2/tools/build/velox_ep/velox/substrait/proto/substrait/type_expressions.proto google/protobuf/any.proto: File not found. substrait/extensions/extensions.proto:6:1: Import "google/protobuf/any.proto" was not found or had errors
已确认google/protobuf/any.proto存在于以下路径:
./build/velox_ep/_build/release/_deps/protobuf-src/src/google/protobuf/any.proto ./build/velox_ep/protobuf/src/google/protobuf/any.proto
导入该文件的extensions.proto路径:
./build/velox_ep/velox/substrait/proto/substrait/extensions/extensions.proto
可行解决方法
给protoc指定Protobuf根目录
错误核心是protoc编译.proto文件时,找不到google/protobuf/any.proto的父级根目录。需要在构建脚本中添加--proto_path(或简写-I)参数指向对应路径:- 若用CMake构建,修改
PROTOBUF_GENERATE_CPP相关配置,添加INCLUDE_DIRECTORIES指向./build/velox_ep/protobuf/src或./build/velox_ep/_build/release/_deps/protobuf-src/src; - 若用Maven的protobuf插件,在插件配置中追加
<protoPath>:<plugin> <groupId>org.xolstice.maven.plugins</groupId> <artifactId>protobuf-maven-plugin</artifactId> <configuration> <protoPaths> <protoPath>${project.basedir}/build/velox_ep/protobuf/src</protoPath> </protoPaths> </configuration> </plugin>
- 若用CMake构建,修改
检查
build_protobuf=OFF的影响
你指定的-Dbuild_protobuf=OFF可能导致构建流程跳过了自动配置protobuf依赖路径的步骤。可以临时移除该参数重新构建,验证是否能自动解决路径问题;如果必须关闭自动构建protobuf,需手动指定已存在的protobuf include目录。通过环境变量传递路径
执行Maven命令前设置环境变量,让构建脚本读取后传递给protoc:export PROTOBUF_INCLUDE=./build/velox_ep/protobuf/src mvn clean package -DskipTests -Dcheckstyle.skip -Pbackends-velox -Dbuild_protobuf=OFF -Dbuild_cpp=ON -Dbuild_velox=On -Dvelox_home=${VELOX_HOME} -Dbuild_arrow=OFF -Dcompile_velox=ON临时复制头文件到可检测路径
作为快速验证方案,将google/protobuf目录复制到extensions.proto的上级目录,让protoc直接找到:cp -r ./build/velox_ep/protobuf/src/google ./build/velox_ep/velox/substrait/proto/
内容的提问来源于stack exchange,提问作者user17118231
相关产品推荐
相关产品推荐

