Intellij idea 有没有办法创建一个跨多个Gradle项目作为模块的联合Intellij项目

Intellij idea 有没有办法创建一个跨多个Gradle项目作为模块的联合Intellij项目,intellij-idea,gradle,Intellij Idea,Gradle,所以它实际上似乎大部分都能工作,两个项目都是整个项目的子模块。但最令人烦恼的是,当我在其中一个模块中调试时,如果代码调用了另一个模块中的某个东西,它会从Gradle缓存而不是另一个项目/模块的代码中获取依赖项,并从其缓存而不是实际的源代码中逐步进入反编译的.class文件 我想找到一种方法,使Intellij识别出一个模块正在使用另一个模块,并使用模块本身的源代码,该源代码当然已签出并在本地文件系统中可用。我在开发模式中使用依赖项替换取得了一些成功,有点像这样: if (project.has(

所以它实际上似乎大部分都能工作,两个项目都是整个项目的子模块。但最令人烦恼的是,当我在其中一个模块中调试时,如果代码调用了另一个模块中的某个东西,它会从Gradle缓存而不是另一个项目/模块的代码中获取依赖项,并从其缓存而不是实际的源代码中逐步进入反编译的.class文件


我想找到一种方法,使Intellij识别出一个模块正在使用另一个模块,并使用模块本身的源代码,该源代码当然已签出并在本地文件系统中可用。

我在开发模式中使用依赖项替换取得了一些成功,有点像这样:

if (project.has("devMode")) {
  configurations.all {
    resolutionStrategy.dependencySubstitution {
      substitute module("foo.group:bar") with project(":bar")
    }
  }
}
root
├───build.gradle
├───settings.gradle
│
├───subA
│    └───build.gradle
├───subB
│    └───build.gradle
└───subC
     └───build.gradle
希望类似的事情也能对你有用

编辑:请注意,您还必须在settings.gradle中有条件地添加
:bar
项目

请参见关于将多个项目设置为“子模块”,尽管gradle行话通常将它们称为子项目

基本上,如果您有一些项目是根项目的子项目,那么您可以如下设置文件夹结构:

if (project.has("devMode")) {
  configurations.all {
    resolutionStrategy.dependencySubstitution {
      substitute module("foo.group:bar") with project(":bar")
    }
  }
}
root
├───build.gradle
├───settings.gradle
│
├───subA
│    └───build.gradle
├───subB
│    └───build.gradle
└───subC
     └───build.gradle
在root
settings.gradle
中,您可以通过添加以下内容来包括子项目:

include 'subA', 'subB', 'subC'
从现在开始,您可以通过名称从任何其他项目引用设置中的任何项目:
project(“:subB”)

因此,如果要将
subC
作为
subA
的编译时依赖项添加到subA的build.gradle中,您需要:

dependencies{
    compile project(':subC')
}

通过这种方式声明,依赖关系是subC的当前文件,而不是存储库中最后生成/安装的二进制文件。您也可以让根项目只是一个持有者项目,没有自己的代码。

您如何在模块之间添加依赖项?您是说在build.gradle中?是的,但是在Maven工件级别,没有任何东西可以告诉IntelliJ一个依赖于另一个,除非它可以从build.gradle或者从我在同一IntelliJ项目下添加IntelliJ模块的事实中推断出它自己。谢谢,让我来玩一下,给我一些至少尝试的方向,也许我可以创建这样一个根项目,仅仅是为了让Intellij认识到这种关系。在源代码管理中,我们实际上希望将项目分开。谢谢你的想法,我会尝试一下。超级酷,我基本上用你的想法只为我的本地开发人员创建一个父项目,设置了你描述的设置。gradle,也在我的本地~/.gradle/gradle.properties表单systemProp.mode=dev中设置了一个系统属性,然后在依赖于项目B的项目a中设置了依赖条件,在项目B上,如果模式是dev,则使用常规工件样式。然后导入IntelliJ,它就像一个符咒。