Gradle Kotlin Allprojects依赖性导致构建故障



在我的gradle项目中,我可以声明带有implementation条目的dependencies块,没问题。但是,当我尝试声明这样的内容时,我会遇到一个错误:

allprojects {
    dependencies {
        implementation("...")
    }
}

我遇到的错误:

Could not find method implementation() for arguments [org.mockito:mockito-core:2.25.0]
on object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler.

我无法通过Java项目重现此功能,因此它可能与Kotlin项目有关。我是Gradle的新手,所以我可能只是在做一些愚蠢的事情吗?这是我的环境信息:

$ gradle --version
------------------------------------------------------------
Gradle 5.2.1
------------------------------------------------------------
Build time:   2019-02-08 19:00:10 UTC
Revision:     f02764e074c32ee8851a4e1877dd1fea8ffb7183
Kotlin DSL:   1.1.3
Kotlin:       1.3.20
Groovy:       2.5.4
Ant:          Apache Ant(TM) version 1.9.13 compiled on July 10 2018
JVM:          1.8.0_112 (Oracle Corporation 25.112-b15)
OS:           Windows 10 10.0 amd64

最小生殖

我可以通过最小的项目重现该问题。

build.gradle:

plugins {
    id 'org.jetbrains.kotlin.jvm' version '1.3.21'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
    mavenCentral()
}
// This works.
dependencies {
    implementation 'org.mockito:mockito-core:2.25.0'
}
// Causes an error. Using a random dependency to reproduce the issue.
allprojects {
    dependencies {
        implementation 'org.mockito:mockito-core:2.25.0'
    }
}

settings.gradle:

rootProject.name = 'demo'
// Removing this line causes the error to go away, but means the module is missing.
include 'submodule'

submodule/build.gradle

// Empty file. I've tried adding various plugins (java / kotlin) to no avail.

build.gradle中的问题是您正在尝试使用构建依赖项配置,在这种情况下,implementation而无需指定java插件。Gradle文档说;

Java插件向您的 项目,如下所示。诸如CompileJava和测试之类的任务,然后使用 这些配置中的一个或多个以获取相应的文件和 例如,通过将它们放置在汇编或运行时来使用它们 classPath。

解决此问题的一种方法是在下面包含java插件(我已经在5.2.1进行了测试,并且效果很好);

allprojects {
    apply plugin: 'java'
    dependencies {
        implementation 'org.mockito:mockito-core:2.25.0'
    }
}

构建配置与java插件的关系已在https://docs.gradle.org/current/userguide/java_plugin.html#sec:java_plugin_and_and_depperency_management

https://docs.gradle.org/current/userguide/managing_depperency_configurations.html#managing_deply_depperency_configurations

另外,请确保您不会在子标题中复制此依赖项(或在根或所有项目中声明的其他依赖项)。

最新更新