You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>
      
  • 检查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:35:15