ChatGPT解决这个技术问题 Extra ChatGPT

找不到参数 Gradle 的方法 compile()

现在环顾这个解决方案太久了,我不确定我是错过了它还是只是输入了错误的东西,但是我的 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 章来自 the Gradle Manual

那我应该工作,但我很困惑为什么它不工作。

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 放在编译块中,但每当我尝试这样做时,我都会得到这个确切的错误。

a
ashelkov

请注意,Java 插件引入的 compileruntimetestCompiletestRuntime 配置自 Gradle 4.10 (Aug 27, 2018) 以来已被弃用,最终在 Gradle 7.0 (Apr 9, 2021 )。

上述配置应分别替换为 implementationruntimeOnlytestImplementationtestRuntimeOnly


这个答案很快就会变得非常流行:)
这是非常简单、清晰和有用的答案!非常感谢。是的,它应该变得非常流行...... :)
尽管是 4 月 1 日的答案,但它确实有效,哈哈
我希望有一些我们可以订阅的 RSS 提要,以便随时了解此类更新
最后,一个简单易懂但信息如此复杂的答案👏,真正的英雄
S
Shashank Agrawal

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


我也放错地方了。谢谢你的协助!
你指的是错误的地方吗?应该编辑哪个 gradle 文件?
@guru_001 你应该编辑 android/app/build.gradle
为什么F ..他们将其命名为相同的?
谢谢,感觉就像一个真正的菜鸟试图解决这个问题
R
Rene Groeschke

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

apply plugin:'java'

这个定义的顺序似乎对构建有影响;就我而言,我遇到了 jar() 标签的问题,Rene 的笔记帮助我解决了这个问题。
在使用 kotlin 时,必须应用 kotlin 插件 apply plugin: "kotlin"
我的语法糖是 plugins { id 'java' }
s
sb813322

它应该是 exclude module: 'net.milkbowl:vault:1.2.27'(添加 module:),如 DependencyHandler linked from here 的文档中所述,因为使用了 ModuleDependency.exclude(java.util.Map) 方法。


回顾这段时间,这是我最有可能遇到的问题。从那以后,我显然已经走了很远,但是在收到有关该问题仍未解决的通知后,我认为将其表示为“正确”答案的唯一正确方法,因为它似乎是最接近的。
R
Rohit Mandiwal

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


是的,如果我们从模块设置对话框中修改 gradle 属性,它就会发生
真的。该死的 gradle.build 文件生成器在一些操作后删除了依赖项块中的换行符。
真的吗?来谷歌吧,这是一个多么大的错误,当我醒来并按下运行按钮时,它删除了我所有的新行!这真是个狗屁人。。
s
sb813322

将依赖项添加到您的项目级 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'
}

这与问题有什么关系?
B
Bazer Con

就我而言,问题是 gradle 版本不匹配。我已经在mac上安装了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

编译失败的原因是Java插件引入的compile、runtime、testCompile和testRuntime配置从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 能够编译和执行任务。


d
dr0i

在我的情况下,我不得不删除一些由 gradle 在我学习的某个时间点创建的文件以使事情正常进行。所以,搞砸后清理,然后它运行良好......

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

Gradle Version:5.1.1


l
longi

仅作记录:我不小心在 Preferences -> Build,Execution,Deployment -> Gradle -> 取消选中 Offline Work 下启用了离线工作,但错误消息具有误导性