user2456600
user2456600

Reputation: 515

Is There A Way To Create A Joint Intellij Project Spanning Multiple Gradle Projects As Modules

So it actually seems to mostly work, with both projects as sub-modules of the overall project. But the major annoyance is that when I debug in one of the modules, if code calls something in the other module it picks up the dependency from the Gradle cache instead of the other project/module's code and steps into a decompiled .class file from its cache instead of the actual source code.

I'd like to find a way so Intellij recognizes one module is using the other and uses the source code from the module itself which is of course checked out and available in the local filesystem.

Upvotes: 2

Views: 82

Answers (2)

Eric Wendelin
Eric Wendelin

Reputation: 44349

I've had some success using dependency substitution in a development mode kinda like this:

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

Hopefully something like that may work for you, too.

EDIT: note that you'll also have to conditionally add the :bar project in settings.gradle as well

Upvotes: 1

RaGe
RaGe

Reputation: 23667

See gradle documentation here about setting up multiple projects as "sub-modules", though gradle lingo usually refers to them as sub-projects.

Basically, if you have some projects that are sub projects of a root project, you would setup the folder structure like this:

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

In your root settings.gradle, you include your sub projects by adding:

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

From this point on, you can refer to any project in your setup from any other project by its name: project(':subB')

so If you want to add subC as a compile time dependency of subA, in subA's build.gradle, you would have:

dependencies{
    compile project(':subC')
}

Declared this way, the dependency is on the current files of subC instead of the last built/installed binaries from the repository. You could also have root project just a holder project with no code of its own.

Upvotes: 2

Related Questions