Could not find method compile() for arguments Gradle

JavaGroovyGradle

Java Problem Overview


Looked around for this solution for much too long now, and I'm not sure if I missed it or just misstyped something, but my Gradle script will not compile. I am migrating to Gradle, and am very new with it. I am very used to using Maven for dependency management, but Gradle seems best me for now. From running this snippet of code:

dependencies {
  compile group: 'org.bukkit', name: 'bukkit', version: '1.7.9-R0.1-SNAPSHOT'
  compile('io.ibj:MattLib:1.1-SNAPSHOT') {
    exclude group: 'de.bananaco'
    exclude 'net.milkbowl:vault:1.2.27'
  }
  compile group: 'net.citizensnpcs', name: 'citizens', version: '2.0.12'
  compile group: 'com.sk89q', name: 'worldedit', version: '5.6.1'
  compile group: 'com.sk89q', name: 'worldguard', version: '5.9'
  compile group: 'net.milkbowl', name: 'vault', version: '1.2.12'
  compile fileTree(dir: 'libs', includes: ['*.jar'])
}

NOTE: I do have the java, maven, nexus, shadow, and rebel plugins applied.

When I run my Gradle task, I encounter this error:

Could not find method compile() for arguments [[io.ibj:MattLib:1.1-SNAPSHOT], build_1b5iofu9r9krp7o8mme0dqo9l$_run_closure2_closure8@66fb45e5] on root project 'project'

If I remove the MattLib dependency from my project and reinsert it as

compile 'io.ibj:MattLib:1.1-SNAPSHOT'

The script completes, but I have dependency issues. I read up here:

dependencies {
  compile("org.gradle.test.excludes:api:1.0") {
    exclude module: 'shared'
  }
}

(From Chapter 50 From the Gradle Manual)

that what I have SHOULD work, but I am confused why it doesn't.

gradle --version output:

Groovy:       1.8.6
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
Ivy:          2.2.0
JVM:          1.8.0_05 (Oracle Corporation 25.5-b02)
OS:           Windows 7 6.1 amd64

Java Solutions


Solution 1 - Java

Note that the compile, runtime, testCompile, and testRuntime configurations introduced by the Java plugin have been deprecated since Gradle 4.10 (Aug 27, 2018), and were finally removed in Gradle 7.0 (Apr 9, 2021).

The aforementioned configurations should be replaced by implementation, runtimeOnly, testImplementation, and testRuntimeOnly, respectively.

Solution 2 - Java

Make sure that you are editing the correct build.gradle file. I received this error when editing android/build.gradle rather than android/app/build.gradle.

Solution 3 - Java

compile is a configuration that is usually introduced by a plugin (most likely the java plugin) Have a look at the gradle userguide for details about configurations. For now adding the java plugin on top of your build script should do the trick:

apply plugin:'java'

Solution 4 - Java

It should be exclude module: 'net.milkbowl:vault:1.2.27'(add module:) as explained in documentation for DependencyHandler linked from here because ModuleDependency.exclude(java.util.Map) method is used.

Solution 5 - Java

In my case, all the compile statements has somehow arranged in a single line. separating them in individual lines has fixed the issue.

Solution 6 - Java

Add the dependency to your project-level build.gradle:

classpath 'com.google.gms:google-services:3.0.0'

Add the plugin to your app-level build.gradle:

apply plugin: 'com.google.gms.google-services'

app-level build.gradle:

dependencies {
        compile 'com.google.android.gms:play-services-auth:9.8.0'
}

Solution 7 - Java

In my case the problem was mismatch in the gradle version. I have installed gradle on mac using

brew install gradle

and got the latest gradle which was 7.0

However when I cloned by project repo and executed the gradle taks it failed with below error

* What went wrong:
A problem occurred evaluating root project 'digital-engineering-course'.
> Could not find method compile() for arguments [org.springframework.boot:spring-boot-starter-web, build_bzpgd6h32w4m8umtmgs76ewog$_run_closure3$_closure8@b55ca3] on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

build.gradle file looked pretty normal to me as it has regular dependencies

dependencies {
	compile("org.springframework.boot:spring-boot-starter-web")	{
		exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
	} 
	compile("org.springframework.boot:spring-boot-starter-data-mongodb")	

It took me a while to understand the problem is mismatch of version. Gradle is not able to find the method compile() because I was using gradle 7.0 in my bash.

And the project was supposed to be ran with gradle 4.8 (Actually gradle wrapper was to be used, but that was breaking for another interesting issue Could not find or load main class org.gradle.wrapper.GradleWrapperMain (If interested please follow this for details)

The reason for failure is compile is that the compile, runtime, testCompile, and testRuntime configurations introduced by the Java plugin have been deprecated since Gradle 4.10, and were finally removed in Gradle 7.0.

So, to solve the problem I had to install the lower version of gradle. If you want to manage multiple version of gradle use sdkman (earlier known as gvm)

Installation on macOs / linux is as simple as executing below

curl -s "https://get.sdkman.io" | bash

Once done use

sdk list gradle

It will list out all the available versions of the gradle. As per your need install and use. for e.g

sdk install gradle 4.8 (this will choose the 4.8 by default in current shell) sdk use gradle 4.8 (if already installed, this is suffice to switch between gradle version)

And now the build.gradle was able to compile and execute the task.

Solution 8 - Java

In my case I had to remove some files that were created by gradle at some point in my study to make things work. So, cleaning up after messing up and then it ran fine ...

If you experienced this issue in a git project, do git status and remove the unrevisioned files. (For me elasticsearch had a problem with plugins/analysis-icu).

Gradle Version : 5.1.1

Solution 9 - Java

Just for the record: I accidentally enabled Offline work under Preferences -> Build,Execution,Deployment -> Gradle -> uncheck Offline Work, but the error message was misleading

Solution 10 - Java

Just you need to change the word compile by the world implementation:

Example:

dependencies {
  compile group: 'org.bukkit', name: 'bukkit', version: '1.7.9-R0.1-SNAPSHOT'
}

will be:

dependencies {
  implementation group: 'org.bukkit', name: 'bukkit', version: '1.7.9-R0.1-SNAPSHOT'
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionIchbinjoeView Question on Stackoverflow
Solution 1 - JavaashelkovView Answer on Stackoverflow
Solution 2 - JavaRussellStewartView Answer on Stackoverflow
Solution 3 - JavaRene GroeschkeView Answer on Stackoverflow
Solution 4 - JavaRadimView Answer on Stackoverflow
Solution 5 - JavaAshishView Answer on Stackoverflow
Solution 6 - JavaPriyanshu SinghView Answer on Stackoverflow
Solution 7 - JavaSanjay BharwaniView Answer on Stackoverflow
Solution 8 - Javadr0iView Answer on Stackoverflow
Solution 9 - JavalongiView Answer on Stackoverflow
Solution 10 - JavaMohamed Aymen CharradaView Answer on Stackoverflow