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.protoinputDirectories保持${basedir}/resources/proto不变,确保插件能扫描到所有需要编译的proto文件
这样配置后,就能正常编译带有导入依赖的proto文件,同时不需要修改Git子模块中的内容。
内容的提问来源于stack exchange,提问作者Baiqing
相关产品推荐
相关产品推荐

