不能找到方法编译()的参数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,阴影和叛乱插件应用。

当我运行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章From Gradle手册)

我所拥有的应该有用,但我很困惑为什么它没有。

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
364310 次浏览

它应该是exclude module: 'net.milkbowl:vault:1.2.27'(添加module:),正如DependencyHandler 从这里链接的文档中解释的那样,因为使用了ModuleDependency.exclude(java.util.Map)方法。

compile是一个configuration,通常是由一个插件(很可能是java插件)引入的。有关配置的详细信息,请参阅gradle用户指南。现在在你的构建脚本上添加java插件应该可以做到:

apply plugin:'java'

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

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

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

将插件添加到你的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'
}

在我的例子中,所有compile语句都以某种方式安排在一行中。将它们分开在单独的行中解决了这个问题。

在我的例子中,我不得不删除一些文件,这些文件是由gradle在我的研究中创建的,以使它工作。所以,把事情搞砸了再收拾,然后一切顺利……

如果你在git项目中遇到这个问题,执行git status并删除未修订的文件。(对我来说,elasticsearchplugins/analysis-icu有一个问题)。

__abc0: 5.1.1

只是为了记录:我不小心在首选项->构建,执行,部署-> Gradle ->取消离线工作下启用了离线工作,但错误消息是误导性的

请注意,Java插件引入的compileruntimetestCompiletestRuntime配置自Gradle 4.10 (2018年8月27日)以来就已弃用,并最终在Gradle 7.0 (2021年4月9日)中被移除。

前面提到的配置应该分别替换为implementationruntimeOnlytestImplementationtestRuntimeOnly

在我的情况下,问题是不匹配的gradle版本。我已经安装gradle 在mac使用

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 (如果感兴趣请按此查看详情)

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

所以,为了解决这个问题,我不得不安装较低版本的gradle。如果你想管理多个版本的gradle,使用sdkman(以前称为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能够编译和执行任务了。