如何使IntelliJ参考源代码在另一个模块?

我有一个典型的项目结构:

- root-dir (not a project) \- core-module (a gradle project) \- application (a gradle project) 

core-moduleapplication都被导入IntelliJ并保持在自动导入。 在applicationbuild.gradlecore-module被引用为:

 compile('my-group-id:core-module:0.2.0-SNAPSHOT') 

其中0.2.0-SNAPSHOT是在core-modulegradle.properties声明的当前版本。

application ,当我尝试从core-module查看一个类时,我将其带入core-module-0.2.0-SNAPSHOT-sources.jar中的源代码,而不是core-module模块中的相应源代码。

我知道我可以在application手动添加core-module作为模块依赖项,但下一次applicationbuild.gradle任何内容build.gradle改变,自动导入将会覆盖该依赖项。

有没有什么办法让IntelliJ自动识别,我想从另一个模块查看类,并去那里,而不是下载的源代码jar?

此外,有没有什么办法让IntelliJ总是比依赖jar更喜欢core-module模块,不仅用于代码查看,还用于构建/运行/调试等等。

所有的源文件都在Kotlin,FWIW。

使用Gradle的组合构建。 Gradle的复合构建https://docs.gradle.org/4.4/userguide/composite_builds.html允许直接“包含”构建,而不是从存储库中进行构建。

IntelliJ也支持这个function。 这是在2016年添加的。

这是一个网络广播: https : //blog.jetbrains.com/idea/2017/03/webinar-recording-composite-builds-with-gradle/

在Gradle选项卡中,右键单击您的应用程序模块。 菜单将有一个“复合构建”选项。 在出现的对话框中,检查“核心模块”模块并关闭。

现在,右键单击应用程序模块并执行“刷新Gradle项目”。 我发现如果我不这样做,依赖不会正确更新。

要validation,请查看sourceSets下的依赖关系。 它现在看起来像一个模块依赖关系。

这提供了许多好处。 一个是你正在寻找的导航。 另外,核心模块中所做的任何更改都立即可用,并用于应用程序。

重构应用程序使用的核心模块中的方法,IntelliJ将重构所有用法。

请享用!