es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Dificultad para mover la configuración de Gradle a un script externo.

Estoy intentando mover algunas partes de mi script de construcción de Gradle a un archivo de configuración externo que se pueda compartir entre proyectos. Aquí hay un ejemplo con el plugin Detekt:

Código actual

build.gradle.kts (condensado para mostrar solo las partes relevantes)

plugins{
id("io.gitlab.arturbosch.detekt").version("1.19.0-RC1")
}
...
detekt{
...
}

Lo que intento hacer

build.gradle.kts

apply(File("common.gradle.kts"))

common.gradle.kts

plugins {
    id("io.gitlab.arturbosch.detekt").version("1.19.0-RC1")
}

pero cuando hago esto, obtengo este error:

<my_project>\common.gradle.kts:7:1: Referencia no resuelta: detekt

Entonces, la sección de plugin no parece estar haciendo nada. Y para dejar claro, este plugin no necesita nada en la sección de dependencies, funciona bien dentro de build.gradle.kts solo con la declaración de plugin.

¿Por qué no funciona?

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema al mover la configuración del plugin Detekt a un archivo externo es que el archivo principal build.gradle.kts no tiene visibilidad a la extensión detekt definida en common.gradle.kts. Una forma de solucionar este problema es declarar una variable en common.gradle.kts que contenga la configuración del plugin Detekt, y luego hacer referencia a esa variable en build.gradle.kts. Aquí hay un ejemplo:

    common.gradle.kts

    val detektConfig = {
        plugins {
            id("io.gitlab.arturbosch.detekt").version("1.19.0-RC1")
        }
    
        detekt {
            // configuración aquí
        }
    }
    

    build.gradle.kts

    apply(from = "common.gradle.kts")
    
    detektConfig()
    

    En este ejemplo, la variable detektConfig en common.gradle.kts es una lambda que contiene la configuración del plugin Detekt. Cuando build.gradle.kts aplica common.gradle.kts, entonces invoca esta lambda para ejecutar la configuración del plugin Detekt. De esta manera, la extensión detekt definida en common.gradle.kts está disponible en build.gradle.kts.

Comments are closed.