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.

Convirtiendo la definición de SourceSet en el complemento de Groovy DSL a Kotlin DSL.

Tengo un método en mi complemento Gradle que declara un nuevo conjunto de fuentes “scratch”. Estoy intentando convertir este método de Groovy a Kotlin, pero no puedo entender cómo debo declarar el nuevo SourceSet usando Kotlin.

class JavaConventionsPlugin : Plugin<project> {
    // ...
    def scratchConfiguration(project) {
        project.sourceSets {
            scratch {
            }
        }
    }

    project.configurations {
        // hacer que las configuraciones de "scratch" incluyan automáticamente todas las dependencias normales
        scratchCompile.extendsFrom mainCompile
        scratchRuntime.extendsFrom mainRuntime
        scratchCompileOnly.extendsFrom compileOnly
        scratchImplementation.extendsFrom implementation
        scratchRuntimeOnly.extendsFrom runtimeOnly
    }

    project.dependencies {
        // agregar dependencia del código principal java del código java "scratch"
        scratchImplementation project.extensions.getByType(JavaPluginExtension).sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).output
    }
}

Dentro del método scratchConfiguration convertido, todas estas parecen ser referencias no resueltas:
* sourceSets
* project.sourceSets
* java.sourceSets

Entonces, ¿cómo debería ser la nueva declaración de SourceSet?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para declarar un nuevo SourceSet en un plugin de Gradle utilizando Kotlin, puedes usar el método de extensión named en la propiedad sourceSets del objeto Project de Gradle. Aquí tienes un ejemplo de cómo podría verse el método scratchConfiguration en Kotlin:

    import org.gradle.api.*
    import org.gradle.api.plugins.*
    import org.gradle.api.tasks.*
    
    class JavaConventionsPlugin : Plugin<project> {
        // ...
        fun scratchConfiguration(project: Project) {
            project.sourceSets.named("scratch").configure {
                // si es necesario, establecer propiedades adicionales en este SourceSet
            }
    
            project.configurations.named("scratchCompile") {
                extendsFrom(project.configurations.getByName("mainCompile"))
            }
            project.configurations.named("scratchRuntime") {
                extendsFrom(project.configurations.getByName("mainRuntime"))
            }
            project.configurations.named("scratchCompileOnly") {
                extendsFrom(project.configurations.getByName("compileOnly"))
            }
            project.configurations.named("scratchImplementation") {
                extendsFrom(project.configurations.getByName("implementation"))
            }
            project.configurations.named("scratchRuntimeOnly") {
                extendsFrom(project.configurations.getByName("runtimeOnly"))
            }
    
            project.dependencies.add("scratchImplementation", project.extensions.getByType(JavaPluginExtension::class.java).sourceSets.getByName(SourceSet.MAIN_SOURCE_SET_NAME).output)
        }
    }
    

    Ten en cuenta que necesitarás importar explícitamente org.gradle.api, org.gradle.api.plugins y org.gradle.api.tasks al principio de tu archivo, y usar puntos en lugar de la sintaxis de llamada a los métodos de Groovy para llamar a los métodos en los objetos.

Comments are closed.