![](/img/trans.png)
[英]Intellij IDEA doesn't see classes but building via Gradle works
[英]IntelliJ IDEA doesn't see classes generated from protobuf files in a subproject
我有一个带有模块的 Gradle 项目。 moduleA
仅包含 protobuf 文件,并生成一个.proto
文件,其中包含从 .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
如果我从 Gradle 构建/运行它,该项目运行良好。
问题: IntelliJ IDEA 在 moduleB 的源代码moduleB
不到从moduleA
生成的类(导入为红色)。
问题:如何让 IntelliJ IDEA 正确识别从.proto
文件构建的类?
我正在使用 IntelliJ IDEA 2020.2.4(终极版)。
这与在同一模块中使用 proto 生成的代码相同,它需要先存在,然后才能被 IDE 拾取。
这种依赖关系不能静态解决。 原型生成的类仅在moduleA
构建后可用。 您需要构建moduleA
至少一次(并在必要时刷新 IDE 导入)以使其生成的代码可以访问moduleB
。
对于 IDE 从依赖模块解析类和导入,这些类应该存在并且它们必须位于依赖模块的源目录中。 看起来这些类生成到 IDE 无法识别为源目录的目录中。 尝试将此生成的目录添加为 Gradle 源集。 在 moduleA 的 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 生成的代码注册源目录,以查看何时在模块文件的 build.gradle 文件中应用idea
' gradle 插件
有关 protobuf gradle 插件文档 的 com.google.protobuf gradle 插件,请参阅 IntelliJ IDEA 提示。
此设置适用于 Intellij IDEA 2021.1。
简短回答:将idea
gradle 插件应用于模块A。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.