How to get IntelliJ to associate Gradle sources wi

2020-07-22 19:36发布

问题:

When writing Gradle scripts for my Java project, specifically, when writing build.gradle files, IntelliJ does not recognize the Gradle API.

For instance, Gradle methods calls like apply, dependencies configure appear with a black line under them and it is not possible to navigate to method declarations, there is no auto-completion etc.

I managed to work around this by adding compile gradleApi() to the build's dependencies block. However, I don't want to have this explicit dependency in my code.

I tried editing IntelliJ's project structure and add a dependency on a Gradle library (tried gradle-core and gradle-all) to my modules, but that seems to have no effect.

Is there a way to make IntelliJ associate all build.gradle files with the Gadle sources?

回答1:

I solved this problem as follows:

  1. As mention in already posted answers, configure gradle

    • update gradle/wrapper/gradle-wrapper.properties file
      change bin to all in distributionUrl i.e.
      distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-bin.zip
      to
      distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip

    • Update gradle task

wrapper {
    gradleVersion = '5.4.1'
    distributionType = Wrapper.DistributionType.ALL
}
  1. Before importing the project to IntelliJ-Idea IDE, update build.gradle and add java and idea plugin to the plugins list
plugins {
    id "java"
    id "idea"
}
  1. From terminal, execute ./gradlew clean build idea or simply ./gradlew idea
  2. Import project to intelliJ idea.
    Go to Preferences --> build,Execution,Deployment --> BuildTools --> Gradle
    You can see
  3. Restart IntelliJ idea IDE.

So above we have configured to both of the options so choose either of them, except specified location option. That's it.

Before

After

Autocomplete functionality as mentioned in this answer.



回答2:

I had similar frustrations with Grails 3, which defines and runs a wrapper task when an app is created. Changing to the "all" zip in the wrapper properties file did not work because this kept getting changed back to the "bin" zip.

This was solved when it was understood that the "gradle-wrapper.properties" file simply stores the values from the "wrapper" task, and if this task is run after the properties are changed, they get changed right back.

This is easily fixed by setting some properties on the wrapper task:

wrapper.gradleVersion='3.2.1'
wrapper.distributionType=Wrapper.DistributionType.ALL

Now importing the project into IDEA gives you smart editing of your build.gradle.



回答3:

when I choose build.gradle in IDEA and open it, IDE prompts

You can configure Gradle wrapper to use distribution with sources. It will provide IDE with Gradle API/DSL documentation.

I choose Ok, apply suggestion!

after project refreshing I am able to use code completion



回答4:

before you import your project, configure it to use the customizable gradle wrapper as per the instructions here :-

https://docs.gradle.org/current/userguide/gradle_wrapper.html

add a task to your top level project like this:-

task wrapper(type: Wrapper) {
    println "Wrapper gradleVersion = '2.12'"
    gradleVersion = '2.12'
}

or whatever the latest version is.

make sure you can build the project from the gradle command line before you try importing into intelliJ, using the ./gradlew command, which will download and install a gradle distribution for you the first time you build.

set your java home, intelliJ home and gradle home variables in your machine and in intelliJ (mine look like this, yours may be different depending on your setup and your history of hacking around your machine...:-

(from .bashrc

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

)

When you do import, choose the customisable gradle wrapper. if all is well, when you open the top level build.gradle for your project, you will be asked to configure sources for the gradle dsl, which will also update your gradle wrapper properties file to this:-

#Thu Mar 31 14:04:00 BST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.12-all.zip

.. the change being from ... bin.zip to all.zip. and that's it. This had been giving me lots of grief for a long time, but that's the way to do it. (on IntelliJ IDEA 2016.1 CE at least...)

most of this was in Dimitry's answer too, but I couldn't get it to work using the default wrapper , it had to be the customisable wrapper.