现在环顾这个解决方案太久了,我不确定我是错过了它还是只是输入了错误的东西,但是我的 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
请注意,Java 插件引入的 compile
、runtime
、testCompile
和 testRuntime
配置自 Gradle 4.10 (Aug 27, 2018) 以来已被弃用,最终在 Gradle 7.0 (Apr 9, 2021 )。
上述配置应分别替换为 implementation
、runtimeOnly
、testImplementation
和 testRuntimeOnly
。
确保您正在编辑正确的 build.gradle
文件。我在编辑 android/build.gradle
而不是 android/app/build.gradle
时收到此错误。
compile
是通常由插件(很可能是 java 插件)引入的 configuration
。有关配置的详细信息,请查看 gradle 用户指南。现在在构建脚本之上添加 java 插件应该可以解决问题:
apply plugin:'java'
apply plugin: "kotlin"
它应该是 exclude module: 'net.milkbowl:vault:1.2.27'
(添加 module:
),如 DependencyHandler
linked from here 的文档中所述,因为使用了 ModuleDependency.exclude(java.util.Map)
方法。
就我而言,所有 compile
语句都以某种方式排列在一行中。将它们分成单独的行已经解决了这个问题。
将依赖项添加到您的项目级 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'
}
就我而言,问题是 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
能够编译和执行任务。
在我的情况下,我不得不删除一些由 gradle 在我学习的某个时间点创建的文件以使事情正常进行。所以,搞砸后清理,然后它运行良好......
如果您在 git 项目中遇到此问题,请执行 git status
并删除未修订的文件。 (对我来说,elasticsearch
遇到了 plugins/analysis-icu
的问题)。
Gradle Version
:5.1.1
仅作记录:我不小心在 Preferences -> Build,Execution,Deployment -> Gradle -> 取消选中 Offline Work 下启用了离线工作,但错误消息具有误导性
不定期副业成功案例分享