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

protoc-jar-maven-plugin无法找到同目录依赖Proto文件的解决办法

解决protoc-jar-maven-plugin编译导入路径问题

问题出在includeDirectories配置与proto文件的导入路径不匹配:你的a.proto中写的导入路径是resources/proto/b.proto,而当前配置的includeDirectories指向${basedir}/resources/proto,这会导致protoc去${basedir}/resources/proto/resources/proto/下查找b.proto,显然找不到目标文件。

由于无法修改Git子模块中的proto文件,只需调整Maven插件的includeDirectories配置,让protoc能正确解析导入路径:

<plugin>
  <groupId>com.github.os72</groupId>
  <artifactId>protoc-jar-maven-plugin</artifactId>
  <version>3.11.4</version>
  <executions>
    <execution>
      <goals>
        <goal>run</goal>
      </goals>
      <phase>generate-sources</phase>
      <configuration>
        <inputDirectories>
          <include>${basedir}/resources/proto</include>
        </inputDirectories>
        <!-- 修改includeDirectories为项目根目录 -->
        <includeDirectories>
          <include>${basedir}</include>
        </includeDirectories>
        <outputTargets>
          <outputTarget>
            <type>java</type>
            <outputDirectory>${project.build.directory}/generated-sources/java</outputDirectory>
          </outputTarget>
        </outputTargets>
      </configuration>
    </execution>
  </executions>
</plugin>

关键修改说明

  • includeDirectories设置为${basedir}:protoc会将项目根目录作为查找导入文件的根路径,当a.proto中导入resources/proto/b.proto时,就能准确定位到实际文件${basedir}/resources/proto/b.proto
  • inputDirectories保持${basedir}/resources/proto不变,确保插件能扫描到所有需要编译的proto文件

这样配置后,就能正常编译带有导入依赖的proto文件,同时不需要修改Git子模块中的内容。

内容的提问来源于stack exchange,提问作者Baiqing

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:15:24