Calicoder
Calicoder

Reputation: 1452

How to add dependency sources to to IntelliJ

I have an IntelliJ project with a gradle build file that includes several projects from a maven central repository. One such dependency is Geb.

When I navigate my classes, I sometimes come across a Geb class that looks interesting. I select "Go to declaration" and get a sad "Cannot find declaration to go to".

Obviously this is because IntelliJ has not loaded the Geb source files. But how do I get it to do that without including Geb as a source in my project? I DO NOT want Geb to be compiled into my project from source because I'm already including it as a dependency in my gradle build file.

  1. Adding it as a module dependency does not work. This is like adding more sources.
  2. I suppose I can grab the repo and build the jars and then include those. Is that really necessary?
  3. Adding the IDEA plugin to the gradle file doesn't work.

Relevant part of the gradle script:

apply plugin: 'groovy'
apply plugin: 'idea'

dependencies {
    // need to depend on geb-spock
    testCompile "org.gebish:geb-spock:0.13.1"
    testCompile "org.spockframework:spock-core:1.0-groovy-2.4"
    testCompile "org.apache.commons:commons-lang3:3.4"
    testCompile "io.github.bonigarcia:webdrivermanager:1.5.0"
    testRuntime "org.seleniumhq.selenium:selenium-support:2.53.1"
}

idea {
    module {
        downloadJavadoc = true // defaults to false
        downloadSources = true
    }
}

Upvotes: 3

Views: 4133

Answers (1)

MartinTeeVarga
MartinTeeVarga

Reputation: 10898

This is a complete build script that downloads all the dependencies with sources:

apply plugin: 'java'
apply plugin: 'idea'

idea {
    module {
        downloadJavadoc = true // defaults to false
        downloadSources = true
    }
}

repositories {
    mavenCentral()
}

dependencies {
    // need to depend on geb-spock
    testCompile "org.gebish:geb-spock:0.13.1"
    testCompile "org.spockframework:spock-core:1.0-groovy-2.4"
    testCompile "org.apache.commons:commons-lang3:3.4"
    testCompile "io.github.bonigarcia:webdrivermanager:1.5.0"
    testRuntime "org.seleniumhq.selenium:selenium-support:2.53.1"
}

task wrapper(type: Wrapper) {
    gradleVersion = '3.3'
}

The dependency shows in the list:

Dependency

And I am able to browse the source code, you can see the comments are there:

The source code


One of the possible explanation might be that in your repository list is a repo, such as mavenLocal or a caching Artifactory, that doesn't have the sources dependency.

The ordering of the repositories matters, so if mavenLocal is first and the sources are not available there, I believe they will not get downloaded. A possible fix would be to remove the dependency from mavenLocal and re-download it, change order of dependencies or if it is the parent script, exempt your subproject when adding the repositories:

configure(allprojects - project(':my-subproj')) { 
    repositories {
    ...
    }
}

I don't think there is any way you can prevent that from the subproject's build script though. It must be done in the parent.

Upvotes: 2

Related Questions