场景:
IntelliJ Idea 中找不到 protocol buffer 生成的 class 类,而在命令行使用 mvn build, mvn package 项目是可以正常编译的。
问题描述:
比如从 IDEA 中打开 Apache Ratis 的源码,或者 Ozone 的源码,会报错提示部分类找不到,例如:
java: Cannot resolve symbol org.apache.ratis.proto.RaftProtos.LogEntryProto
java: package org.apache.hadoop.hdds.protocol.proto.HddsProtos does not exist
java: Cannot resolve symbol ContainerProtos
问题原因:
这是因为生成的源文件有数万行,源文件过大导致 idea 拒绝编译过大的源文件。
解决方案:
如果 protoc 生成的 class 文件找不到,说明 protoc 文件没有没有正确编译。 可以调整 IDEA 的默认参数, 然后重启 IntelliJ IDEA 使得 IDE 能够正确找到 protoc 生成的 Java 类。
- 打开 Help -> Edit 菜单
- 增加一行:
idea.max.intellisense.filesize=10000
- 重启 IDE
idea.max.intellisense.filesize 的值默认为 2500, 单位是 kb,即默认最大的源码文件大约为 2.5M,前面的参数把这个值调整到接近 10M。
问题分析:
比如 apache ratis 项目中从 proto 文件生成的这个源码大小是 2504kb, 刚好超过 2500 kb。
$du -sk ratis-proto/target/generated-sources/org/apache/ratis/proto/RaftProtos.java
2504 ratis-proto/target/generated-sources/org/apache/ratis/proto/RaftProtos.java