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

时间:2014-05-22 01:25:56

标签: 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'])
}

注意:我确实应用了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'

如果我删除" MattLib"来自我的项目的依赖项并将其重新插入

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

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

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

(摘自第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

有什么想法吗?

11 个答案:

答案 0 :(得分:152)

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

答案 1 :(得分:89)

请注意,Java 插件引入的 compileruntimetestCompiletestRuntime 配置自 Gradle 4.10({{3} }),并最终在 Aug 27, 2018 (Gradle 7.0) 中被移除。

上述配置应分别替换为 implementationruntimeOnlytestImplementationtestRuntimeOnly

答案 2 :(得分:85)

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

apply plugin:'java'

答案 3 :(得分:8)

就我而言,所有compile语句都以某种方式排列在一行中。将它们分成不同的线条已经解决了这个问题。

答案 4 :(得分:6)

应该是exclude module: 'net.milkbowl:vault:1.2.27'(添加module:),因为DependencyHandler的文档中说明了ModuleDependency.exclude(java.util.Map),因为使用了{{1}}方法。

答案 5 :(得分:6)

希望以下步骤将有所帮助

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

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

将插件添加到应用级 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'
}

答案 6 :(得分:5)

compile 已在较新版本的 gradle 中替换为 implementation,在构建中将 compile 替换为 implementation,将 compile group 替换为 implmenetation group .gradle 文件。

答案 7 :(得分:1)

就我而言,问题是 gradle 版本不匹配。我已经使用

在 mac 上安装了 gradle
brew install gradle

并获得最新的 gradle 7.0

但是,当我通过项目 repo 克隆并执行 gradle taks 时,它失败并显示以下错误

* 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 文件对我来说看起来很正常,因为它有常规的依赖

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")    

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

并且该项目应该使用 gradle 4.8 运行(实际上要使用 gradle 包装器,但由于另一个有趣的问题 Could not find or load main class org.gradle.wrapper.GradleWrapperMain (有兴趣请关注https://stackoverflow.com/a/67839118/1503163了解详情)

编译失败的原因是引入了compileruntimetestCompiletestRuntime配置由 Java 插件从 Gradle 4.10 开始被弃用,最终在 Gradle 7.0 中被移除。

所以,为了解决这个问题,我不得不安装低版本的 gradle。如果您想管理多个版本的 gradle,请使用 https://sdkman.io/(以前称为 gvm)

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

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

完成后使用

sdk list gradle

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

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

现在 build.gradle 能够编译和执行任务了。

答案 8 :(得分:0)

错误的gradle文件。正确的是你的'app'文件夹中的build.gradle。

答案 9 :(得分:0)

在我的情况下,我必须删除在研究中的某个时候gradle创建的一些文件,以使一切正常。所以,弄乱后清理干净,然后就可以了...

如果您在git项目中遇到此问题,请执行git status并删除未修订的文件。 (对我来说elasticsearch遇到了plugins/analysis-icu的问题)。

Gradle Version:5.1.1

答案 10 :(得分:0)

仅作记录:我不小心启用了首选项->构建,执行,部署-> Gradle->取消选中<离线> ,但错误消息是误导