• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

433
Views
¿Cómo uso Gradle Kotlin DSL dentro de un complemento?

Estoy creando un complemento de Gradle.

Estoy escribiendo un código como este llamando a las API Groovy/Java Gradle:

 package com.example import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.Exec class HelloPlugin : Plugin<Project> { override fun apply(project: Project) { project.afterEvaluate { project.tasks.register("hello", Exec::class.java) { task -> task.commandLine = listOf( "echo", "Hello, world!" ) } } } }

Preferiría escribir un código como este:

 package com.example import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.Exec class HelloPlugin : Plugin<Project> { override fun apply(project: Project) { project.afterEvaluate { project.tasks.register<Exec>("hello") { task -> task.commandLine = listOf( "echo", "Hello, world!" ) } } } }

Después de habilitar el complemento kotlin-dsl en build.gradle.kts , recibo errores del compilador en el HelloPlugin.kt original sin cambios:

e: /home/example/Documents/gradle-com.example.hello-plugin/src/main/kotlin/com/example/HelloPlugin.kt: (11, 27): ninguna de las siguientes funciones se puede llamar con los argumentos suministrado:
registro divertido público abstracto (p0: Cadena, p1: Clase, vararg p2: ¡Cualquiera!): TaskProvider definido en org.gradle.api.tasks.TaskContainer
registro divertido público abstracto (p0: Cadena, p1: Clase, p2: Acción): TaskProvider definido en org.gradle.api.tasks.TaskContainer
e: /home/example/Documents/gradle-com.example.hello-plugin/src/main/kotlin/com/example/HelloPlugin.kt: (12, 22): Referencia no resuelta: commandLine
e: /home/example/Documents/gradle-com.example.hello-plugin/src/main/kotlin/com/verafin/aws/lambda/AbstractLambdaPlugin.kt: (76, 53): Ninguna de las siguientes funciones puede ser llamado con los argumentos proporcionados:
registro divertido público abstracto (p0: Cadena, p1: Clase, vararg p2: ¡Cualquiera!): TaskProvider definido en org.gradle.api.tasks.TaskContainer
registro divertido público abstracto (p0: Cadena, p1: Clase, p2: Acción): TaskProvider definido en org.gradle.api.tasks.TaskContainer

El proyecto ejecutable completo está en: https://github.com/AlainODea/gradle-com.example.hello-plugin

¿Cómo uso Gradle Kotlin DSL dentro de un complemento?

about 3 years ago · Santiago Trujillo
1 answers
Answer question

0

En build.gradle.kts, Gradle Kotlin DSL se carga con el complemento. En las clases de Kotlin en la implementación de su complemento, debe importar Gradle Kotlin DSL explícitamente:

 import org.gradle.kotlin.dsl.*

Aquí hay un ejemplo de trabajo completo de la clase Kotlin del complemento Gradle que usa Kotlin Gradle DSL:

 package com.example import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.Exec import org.gradle.kotlin.dsl.* class HelloPlugin : Plugin<Project> { override fun apply(project: Project) { project.afterEvaluate { project.tasks.register<Exec>("hello") { task -> task.commandLine = listOf( "echo", "Hello, world!" ) } } } }

Con Kotlin Gradle DSL, puede omitir los parámetros de cierre nombrados explícitamente y hacerlo aún más limpio:

 package com.example import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.tasks.Exec import org.gradle.kotlin.dsl.* class HelloPlugin : Plugin<Project> { override fun apply(project: Project) { project.afterEvaluate { tasks.register<Exec>("hello") { commandLine = listOf( "echo", "Hello, world!" ) } } } }
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error