En mi proyecto Gradle, puedo declarar un bloque de dependencies con entradas de implementation , no hay problema. Sin embargo, cuando trato de declarar algo como esto, aparece un error:
allprojects { dependencies { implementation("...") } }El error que obtengo:
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.No pude reproducir esto con un proyecto Java, por lo que podría tener algo que ver con el proyecto Kotlin. Soy nuevo en Gradle, ¿así que podría estar haciendo algo tonto? Aquí está la información de mi entorno:
$ 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 amd64Puedo reproducir el problema con un proyecto mínimo.
construir.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.El problema en su build.gradle es que está tratando de usar una configuración de dependencia de compilación, en este caso, la implementation sin especificar el complemento de java . Los documentos de gradle dicen;
El complemento de Java agrega una serie de configuraciones de dependencia a su proyecto, como se muestra a continuación. Tareas como compileJava y test luego usan una o más de esas configuraciones para obtener los archivos correspondientes y usarlos, por ejemplo, colocándolos en un classpath de compilación o tiempo de ejecución.
Una forma de solucionar esto es incluir el complemento java como se muestra a continuación (he probado en 5.2.1 y funcionó bien);
allprojects { apply plugin: 'java' dependencies { implementation 'org.mockito:mockito-core:2.25.0' } } La relación de la configuración de compilación con el complemento de java se ha descrito detalladamente en https://docs.gradle.org/current/userguide/java_plugin.html#sec:java_plugin_and_dependency_management
y
Además, asegúrese de no duplicar esta dependencia (o cualquier otra que se declare en la raíz o para todos los proyectos) en subproyectos.