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

时间:2016-02-16 12:58:31

标签: intellij-idea gradle

所以它实际上似乎主要是工作,两个项目都是整个项目的子模块。但主要的烦恼是,当我在其中一个模块中调试时,如果代码调用另一个模块中的某些东西,它会从Gradle缓存中获取依赖关系而不是其他项目/模块的代码,并从其中获取反编译的.class文件。缓存而不是实际的源代码。

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

2 个答案:

答案 0 :(得分:2)

关于将多个项目设置为“子模块”,请参阅gradle documentation here,尽管gradle lingo通常将它们称为子项目。

基本上,如果你有一些项目是根项目的子项目,你可以设置这样的文件夹结构:

root
├───build.gradle
├───settings.gradle
│
├───subA
│    └───build.gradle
├───subB
│    └───build.gradle
└───subC
     └───build.gradle

在您的根settings.gradle中,您可以通过添加以下内容来包含子项目:

include 'subA', 'subB', 'subC'

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

所以如果你想将subC添加为subA的编译时依赖关系,那么在subA的build.gradle中你可以:

dependencies{
    compile project(':subC')
}

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

答案 1 :(得分:1)

我在开发模式中使用依赖项替换取得了一些成功,如下所示:

if (project.has("devMode")) {
  configurations.all {
    resolutionStrategy.dependencySubstitution {
      substitute module("foo.group:bar") with project(":bar")
    }
  }
}

希望这样的事情对你也有用。

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