IntelliJ IDEA 没有看到 类 从子项目中的 protobuf 文件生成

IntelliJ IDEA doesn't see classes generated from protobuf files in a subproject

我有一个带有模块的 Gradle 项目。 moduleA 仅包含 protobuf 文件并生成一个 jar 文件,其中 类 从 .proto 文件生成。 moduleB 取决于 moduleA (implementation project(':moduleA')).

moduleA
│   build.gradle
│   src
│   └───main
│       └───proto  <-- proto file defining gRPC services
moduleB
│   build.gradle
│   src            <-- code dependent on classes generated from moduleA
build.gradle

如果我 build/run 来自 Gradle,该项目运行良好。

问题: IntelliJ IDEA 在 moduleB 的源中看不到 moduleA 生成的 类(导入为红色)。

问题:如何让 IntelliJ IDEA 正确识别从 .proto 文件构建的 类?

我使用的是IntelliJ IDEA 2020.2.4(旗舰版)

这与在同一模块中使用 proto 生成的代码相同,它需要先存在才能被 IDE 拾取。

此类依赖关系无法静态解决。生成的原型 类 仅在 moduleA 构建 后可用。您需要至少构建一次 moduleA(并在必要时刷新 IDE 导入)以使其生成的代码可访问 moduleB.

为了 IDE 解析 类 并从依赖模块导入这些 类 应该存在并且它们必须位于依赖模块的 source directory 中。看起来 类 生成到一个目录中,该目录未被 IDE 识别为 source 目录。尝试将此生成的目录添加为 Gradle 源集。在模块 A 的 Gradel 构建文件中添加:

sourceSets {
    main {
        java {
            srcDirs = ['build/generated/source/proto/main/java']
        }
    }
}

其中 'build/generated/source/proto/main/java' - 生成源的目录。

IntelliJ IDEA 有一个相关问题:IDEA-209418

开箱即用的 Intellij 不知道从 .proto 文件生成的 类 的位置。 'com.google.protobuf' gradle 插件将源码目录注册为Intellij 生成的代码,以查看idea' gradle 插件何时应用于模块A 的build.gradle 文件.

有关 protobuf gradle 插件文档,请参阅 IntelliJ IDEA tips for com.google.protobuf gradle plugin

此设置适用于我的 Intellij IDEA 2021.1。

简短回答:将 idea gradle 插件应用到模块 A。