无法为参数Gradle找到方法compile()

Ich*_*joe 87 java groovy gradle

现在考虑这个解决方案已经太久了,我不确定我是否错过了它或只是错误输入了一些内容,但我的Gradle脚本无法编译.我正在迁移到Gradle,我很新.我非常习惯使用Maven进行依赖管理,但Gradle现在看起来最好.从运行此代码片段:

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'])
}
Run Code Online (Sandbox Code Playgroud)

注意:我确实应用了java,maven,nexus,shadow和rebel插件.

当我运行Gradle任务时,遇到此错误:

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

如果我从项目中删除"MattLib"依赖项并将其重新插入

compile 'io.ibj:MattLib:1.1-SNAPSHOT'
Run Code Online (Sandbox Code Playgroud)

该脚本完成,但我有依赖性问题.我在这里读到:

dependencies {
  compile("org.gradle.test.excludes:api:1.0") {
    exclude module: 'shared'
  }
}
Run Code Online (Sandbox Code Playgroud)

(摘自第50章Gradle手册,http://www.gradle.org/docs/current/userguide/dependency_management.html)

我应该有什么工作,但我很困惑,为什么它没有.

gradle --version输出:

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
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

Rus*_*art 158

确保您正在编辑正确的build.gradle文件.我在编辑时收到此错误android/build.gradle而不是android/app/build.gradle.

  • 我也把它放在了错误的地方.谢谢你的协助! (7认同)
  • 你的意思是错误的地方吗?我应该编辑哪个gradle文件? (2认同)
  • 为什么 F.. 他们命名相同? (2认同)

ash*_*kov 147

请注意,compileruntimetestCompile,和testRuntime由Java引入了配置的插件已经被废弃了,因为摇篮4.102018年8月27日),并在最后被删除摇篮7.02021年4月9日)。

上述的配置应改为implementationruntimeOnlytestImplementation,和testRuntimeOnly,分别。

  • 这个答案很快就会变得*非常*流行:) (35认同)
  • 我希望有一些 RSS 源供我们订阅以随时了解此类更新 (6认同)
  • ggs 仅更改命令而无需后备或文档条目 (2认同)

Ren*_*hke 91

compile是一个configuration通常由插件引入的(很可能是java插件)有关配置的详细信息,请查看gradle用户指南.现在,在构建脚本之上添加java插件应该可以解决问题:

apply plugin:'java'
Run Code Online (Sandbox Code Playgroud)


San*_*ani 10

就我而言,问题是 gradle 版本不匹配。我已经在 mac 上安装了 gradle使用

brew install gradle
Run Code Online (Sandbox Code Playgroud)

并得到了最新的 gradle 7.0

但是,当我通过项目存储库克隆并执行 gradle 任务时,它失败并出现以下错误

* 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.
Run Code Online (Sandbox Code Playgroud)

build.gradle文件对我来说看起来很正常,因为它具有常规依赖项

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")    
Run Code Online (Sandbox Code Playgroud)

我花了一段时间才明白问题是版本不匹配。Gradle 无法找到该方法,compile()因为我在 bash 中使用 gradle 7.0。

该项目应该使用 gradle 4.8 运行(实际上是使用 gradle 包装器,但这打破了另一个有趣的问题Could not find or load main class org.gradle.wrapper.GradleWrapperMain (如果有兴趣,请按照此了解详细信息

失败的原因是compile,因为Java插件引入的compileruntimetestCompiletestRuntime配置从Gradle 4.10开始就被弃用了,最终在Gradle 7.0中被删除。

所以,为了解决这个问题,我必须安装较低版本的gradle。如果你想管理多个版本的 gradle,请使用sdkman(以前称为 gvm)

在 macOs/linux 上安装就像执行下面一样简单

curl -s "https://get.sdkman.io" | bash
Run Code Online (Sandbox Code Playgroud)

完成后使用

sdk list gradle
Run Code Online (Sandbox Code Playgroud)

它将列出 gradle 的所有可用版本。根据您的需要安装和使用。例如

sdk install gradle 4.8(这将在当前 shell 中默认选择 4.8) sdk use gradle 4.8(如果已经安装,这足以在 gradle 版本之间切换)

现在build.gradle可以编译并执行任务了。


Roh*_*wal 8

就我而言,所有的compile陈述都以某种方式安排在一行中.将它们分成单独的行已经解决了这个问题.


Rad*_*dim 6

它应该是exclude module: 'net.milkbowl:vault:1.2.27'(添加module:),如http://www.gradle.org/docs/current/javadoc/org/gradle/api/Project.html#dependencies(groovy.lang.Closure)DependencyHandler链接的文档中所解释的那样,因为方法是用过的.ModuleDependency.exclude(java.util.Map)


小智 6

希望以下步骤将有所帮助

将依赖项添加到项目级 build.gradle:

classpath 'com.google.gms:google-services:3.0.0'
Run Code Online (Sandbox Code Playgroud)

将插件添加到您的应用级 build.gradle:

apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud)

app-level build.gradle:

dependencies {
        compile 'com.google.android.gms:play-services-auth:9.8.0'
}
Run Code Online (Sandbox Code Playgroud)

  • 这与问题有什么关系? (2认同)

Der*_*ick 5

compileimplementation在较新版本的 gradle 中替换,在 build.gradle 文件中替换compileimplementation和。compile groupimplmenetation group