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.

Referencias no resueltas de Gradle Kotlin DSL definidas en buildSrc.

Estoy experimentando con Kotlin DSL pero no puedo hacer que reconozca los objetos que definí en buildSrc. El IDE los resuelve, pero cuando compilo el código, no funciona.

Esta es mi estructura de proyecto:

build.gradle.kts
settings.gradle.kts
+buildSrc
    build.gradle.kts
    +src
        +main
            +java
                Dependencies.kt
                Versions.kt
+module1
    build.gradle.kts
+module2
    build.gradle.kts

Contenido de Dependencies.kt:

/**
 * Para definir los plugins
 */
object BuildPlugins {
    val gradle by lazy { "com.android.tools.build:gradle:${Versions.gradlePlugin}" }
    val kotlinGradle by lazy { "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}" }
    val safeArgs by lazy { "androidx.navigation:navigation-safe-args-gradle-plugin:${Versions.safeArgs}" }
}

/**
 * Para definir las dependencias
 */
object Deps {
    val appCompat by lazy { "androidx.appcompat:appcompat:${Versions.appCompat}" }
    val core by lazy { "androidx.core:core-ktx:${Versions.core}" }
    val timber by lazy { "com.jakewharton.timber:timber:${Versions.timber}" }
    val kotlin by lazy { "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${Versions.kotlin}" }
    val material by lazy { "com.google.android.material:material:${Versions.material}" }
    val constraintLayout by lazy { "androidx.constraintlayout:constraintlayout:${Versions.constraintLayout}" }
}

build.gradle.kts de todo el proyecto (el que falla primero):

// Archivo de construcción de nivel superior donde puede agregar opciones de configuración comunes a todos los subproyectos/módulos.
buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        BuildPlugins.gradle
        BuildPlugins.kotlinGradle
        BuildPlugins.safeArgs
    }

    // NOTA: No coloque las dependencias de su aplicación aquí; pertenecen a los archivos de construcción de módulos individuales.
}

...

También quiero señalar que el bloque de android { … } no es reconocido en los archivos de construcción de los módulos, pero creo que puede ser debido a la falla en la compilación.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en el archivo build.gradle.kts a nivel de proyecto, ya que no reconoce los objetos definidos en el directorio buildSrc.

    Una posible solución para esto es incluir buildSrc en el archivo settings.gradle.kts de la siguiente manera:

    include(":buildSrc")
    

    Luego, en el archivo build.gradle.kts a nivel de proyecto, agrega buildSrc como un subproyecto:

    // Archivo de construcción de nivel superior donde se pueden agregar opciones de configuración comunes a todos los subproyectos/módulos.
    buildscript {
        repositories {
            google()
            mavenCentral()
        }
        dependencies {
            BuildPlugins.gradle
            BuildPlugins.kotlinGradle
            BuildPlugins.safeArgs
        }
    }
    
    // Agregar buildSrc como un subproyecto
    subprojects {
        apply(plugin = "kotlin")
        apply(plugin = "kotlin-kapt")
    
        repositories {
            google()
            mavenCentral()
        }
    
        dependencies {
            ...
        }
    }
    
    // Agregar buildSrc como un proyecto separado
    project(":buildSrc") {
        apply(plugin = "kotlin")
        apply(plugin = "kotlin-dsl")
    
        repositories {
            mavenCentral()
        }
    
        dependencies {
            ...
        }
    }
    

    Esto debería hacer que los objetos definidos en buildSrc estén disponibles para su uso en el archivo build.gradle.kts a nivel de proyecto y, por lo tanto, también en los archivos build.gradle.kts específicos del módulo.

Comments are closed.