找不到参数 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 版本不匹配。我已经在 ma​​c 上使用

安装了 gradle
brew 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)

编译失败的原因是引入了compileruntimetestCompiletestRuntime配置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 插件引入的compileruntimetestCompiletestRuntime 配置自Gradle 4.10 (Aug 27, 2018) 以来已被弃用,最终在Gradle 7.0 ( Apr 9, 2021)。

上述配置应分别替换为implementationruntimeOnlytestImplementationtestRuntimeOnly

【讨论】:

这个答案很快就会变得非常流行:) 这是一个非常简单、清晰和有用的答案!非常感谢。是的,它应该会变得非常流行...... :) 尽管是 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]