Зависимости всех проектов Gradle Kotlin вызывают сбой сборки - PullRequest
1 голос
/ 11 марта 2019

В моем проекте Gradle я могу объявить блок dependencies с implementation записями, без проблем. Однако когда я пытаюсь объявить что-то подобное, я получаю сообщение об ошибке:

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.

1 Ответ

1 голос
/ 11 марта 2019

Проблема в вашем build.gradle заключается в том, что вы пытаетесь использовать конфигурацию зависимости сборки, в данном случае implementation без указания плагина java.В документации gradle говорится:

Плагин Java добавляет несколько конфигураций зависимостей в ваш проект, как показано ниже.Такие задачи, как compileJava и test, затем используют одну или несколько из этих конфигураций, чтобы получить соответствующие файлы и использовать их, например, поместив их в путь к классам компиляции или среды выполнения.

Один из способов исправить этовключить плагин 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_dependency_management

и

https://docs.gradle.org/current/userguide/managing_dependency_configurations.html#managing_dependency_configurations

Также убедитесь, что вы не дублируете эту зависимость (или любую другую, объявленную в корне или для всех проектов) в подпроектах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...