找不到参数 Gradle 的方法 compile()
Posted
技术标签:
【中文标题】找不到参数 Gradle 的方法 compile()【英文标题】:Could not find method compile() for arguments Gradle 【发布时间】:2022-01-23 22:17:48 【问题描述】:现在寻找这个解决方案太久了,我不确定我是错过了它还是只是输入了错误的东西,但是我的 Gradle 脚本无法编译。我正在迁移到 Gradle,并且对它非常陌生。我非常习惯使用 Maven 进行依赖管理,但 Gradle 似乎是我现在最好的选择。从运行这个 sn-p 代码:
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'
(来自the Gradle Manual第50章)
我所拥有的应该可以工作,但我很困惑为什么它不工作。
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
【问题讨论】:
你有没有想过这个问题?我有完全相同的问题。论坛上有人建议将 exclude 放在编译块中,但每当我尝试这样做时,我都会收到这个确切的错误。 【参考方案1】:在我的情况下,问题是 gradle 版本不匹配。我已经在 mac 上使用
安装了 gradlebrew install gradle
并获得了最新的 7.0 gradle
但是,当我通过项目 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
(如有兴趣please follow this for details)
编译失败的原因是引入了compile、runtime、testCompile和testRuntime配置Java 插件自 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
能够编译和执行任务了。
【讨论】:
【参考方案2】:它应该是exclude module: 'net.milkbowl:vault:1.2.27'
(添加module:
),如DependencyHandler
linked from here 的文档中所述,因为使用了ModuleDependency.exclude(java.util.Map)
方法。
【讨论】:
回顾这段时间,这是我最有可能遇到的问题。从那以后我显然已经走了很长一段路,但是在收到有关此问题仍未解决的通知后,我认为将其表示为“正确”答案的唯一正确方法,因为它似乎是最接近的。【参考方案3】:将依赖项添加到您的项目级别 build.gradle
:
classpath 'com.google.gms:google-services:3.0.0'
将插件添加到您的应用级 build.gradle
:
apply plugin: 'com.google.gms.google-services'
应用级 build.gradle
:
dependencies
compile 'com.google.android.gms:play-services-auth:9.8.0'
【讨论】:
这和问题有什么关系?【参考方案4】:请注意,Java 插件引入的compile
、runtime
、testCompile
和testRuntime
配置自Gradle 4.10 (Aug 27, 2018) 以来已被弃用,最终在Gradle 7.0 ( Apr 9, 2021)。
上述配置应分别替换为implementation
、runtimeOnly
、testImplementation
和testRuntimeOnly
。
【讨论】:
这个答案很快就会变得非常流行:) 这是一个非常简单、清晰和有用的答案!非常感谢。是的,它应该会变得非常流行...... :) 尽管是 4 月 1 日的答案,但它确实有效哈哈 我希望我们可以订阅一些 RSS 提要,以便及时了解此类更新 @JustKhaithang 绝对不是。这是拉而不是推的问题。更好的文档或更好的语言将是选择。我更喜欢 1。【参考方案5】:仅作记录:我不小心启用了 Preferences -> Build,Execution,Deployment -> Gradle -> 取消选中 Offline Work 下的 Offline work,但错误消息是误导
【讨论】:
【参考方案6】:在我的情况下,我不得不删除一些由 gradle 在我学习的某个时间点创建的文件以使事情正常进行。所以,搞砸后清理,然后它运行良好......
如果您在 git 项目中遇到此问题,请执行 git status
并删除未修订的文件。 (对我来说,elasticsearch
遇到了plugins/analysis-icu
的问题。
Gradle Version
:5.1.1
【讨论】:
【参考方案7】:确保您正在编辑正确的build.gradle
文件。我在编辑 android/build.gradle
而不是 android/app/build.gradle
时收到此错误。
【讨论】:
我也放错地方了。感谢您帮助我! 你指的是错误的地方吗?应该编辑哪个 gradle 文件? @guru_001 你应该编辑android/app/build.gradle 为什么 F.. 他们把它命名为一样的??【参考方案8】:就我而言,所有compile
语句都以某种方式排列在一行中。将它们分开在单独的行中已经解决了这个问题。
【讨论】:
是的,如果我们从模块设置对话框中修改 gradle 属性,它就会发生 是的。该死的 gradle.build 文件生成器在一些操作后删除了依赖项块中的换行符。 哦,真的吗?来谷歌吧,这是一个多么大的错误,当我醒来并按下运行按钮时,它删除了我所有的新行!这真是个狗屁人..【参考方案9】:compile
是一个configuration
,通常由插件(很可能是 java 插件)引入。有关配置的详细信息,请查看 gradle 用户指南。现在在构建脚本之上添加 java 插件应该可以解决问题:
apply plugin:'java'
【讨论】:
这个定义的顺序似乎对构建有影响;就我而言,我遇到了 jar() 标签的问题,Rene 的笔记帮助我解决了这个问题。 在使用 kotlin 时,必须应用 kotlin 插件apply plugin: "kotlin"
我的语法糖是 plugins id 'java' 以上是关于找不到参数 Gradle 的方法 compile()的主要内容,如果未能解决你的问题,请参考以下文章
找不到方法'org.gradle.api.tasks.compile.CompileOptions
Gradle build:找不到参数的方法signingConfig()
React native build.gradle 显示找不到参数的方法 signincongfigs
Gradle 和 proguard:找不到参数的方法 runProguard() [true]
build.gradle 文件中的 compileKotlin 块抛出错误“找不到参数的方法 compileKotlin() [...]”
Gradle - 错误找不到参数的方法 implementation() [com.android.support:appcompat-v7:26.0.0]