Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

537
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?

over 4 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!" ) } } } }
over 4 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 Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!