我有一个典型的项目结构:
- root-dir (not a project)
\- core-module (a gradle project)
\- application (a gradle project)
core-module
和application
都导入IntelliJ并保持自动导入。在application
的build.gradle
中,core-module
被引用为:
compile('my-group-id:core-module:0.2.0-SNAPSHOT')
其中0.2.0-SNAPSHOT
是core-module
的gradle.properties
中声明的当前版本。
在application
中,当我尝试从core-module
查看类时,我被带到core-module-0.2.0-SNAPSHOT-sources.jar
中的源代码,而不是core-module
模块中的相应源代码。
我知道我可以手动添加core-module
作为application
中的模块依赖项,但下次application
的build.gradle
中的任何内容都会发生变化时,自动导入将覆盖该依赖项。
是否有任何方法可以使IntelliJ自动识别我正在尝试从另一个模块查看一个类而不是下载的源jar?
此外,有没有办法让IntelliJ总是更喜欢core-module
模块而不是依赖jar,不仅用于代码查看,还用于构建/运行/调试/等等。
所有源文件都在Kotlin,FWIW中。
使用Gradle的复合构建。 Gradle具有复合构建https://docs.gradle.org/4.4/userguide/composite_builds.html,允许直接“包含”构建,而不是从存储库。
IntelliJ还支持此功能。这是在2016年增加的。
这是一个网络广播:https://blog.jetbrains.com/idea/2017/03/webinar-recording-composite-builds-with-gradle/
在Gradle选项卡中,右键单击您的应用程序模块。该菜单将具有“复合构建”选项。在出现的对话框中,选中“core-module”模块并关闭。
现在,右键单击应用程序模块并执行“刷新Gradle项目”。我发现,如果我不这样做,依赖关系不会得到正确更新。
要验证,请查看sourceSets下的依赖项。它现在看起来像模块依赖,而不是版本#。
这提供了许多好处。一个是您正在寻找的导航。此外,核心模块中的任何更改都可立即使用,并用于应用程序。
重构应用程序使用的核心模块中的方法,IntelliJ将重构所有用法。
请享用!