当前位置: 首页 > 知识库问答 >
问题:

如何在插件中使用Gradle Kotlin DSL?

郎鸿朗
2023-03-14
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!"
                )
            }
        }
    }
}
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!"
                )
            }
        }
    }
}

E:/home/example/documents/gradle-com.example.hello-plugin/src/main/kotlin/com/example/helloplugin.kt:(11,27):以下任何函数都不能用提供的参数调用:
public抽象fun register(P0:String,p1:Class,vararg p2:any!):在org.gradle.api.tasks.taskcontainer中定义的TaskProvider
公共抽象乐趣寄存器(P0:String,p1:Class,p2:Action):在org.gradle.api.tasks.taskcontainer中定义的TaskProvider
e:/home/example/documents/gradle-com.example.hello-plugin/src/main/kotlin/com/example/helloplugin.kt:(12,da/AbstractLambdaPlugin.kt:(76,53):不能使用提供的参数调用以下任何函数:
公共抽象乐趣寄存器(P0:String,P1:Class,vararg P2:any!):在org.gradle.api.tasks.taskContainer中定义的TaskProvider
公共抽象乐趣寄存器(P0:String,P1:Class,P2:Action):在org.gradle.api.tasks.taskContainer中定义的TaskProvider

完整的可运行项目位于:https://html" target="_blank">github.com/alainodea/gradle-com.example.hello-plugin

如何在插件中使用Gradle Kotlin DSL?

共有1个答案

蔺劲
2023-03-14

在build.Gradle.kts中,Gradle Kotlin DSL加载了插件。在插件实现中的Kotlin类中,需要显式导入Gradle Kotlin DSL:

import org.gradle.kotlin.dsl.*

下面是使用Kotlin Gradle DSL的完整的工作示例Gradle插件Kotlin类:

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!"
                )
            }
        }
    }
}

使用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 {
            tasks.register<Exec>("hello") {
                commandLine = listOf(
                    "echo",
                    "Hello, world!"
                )
            }
        }
    }
}
 类似资料:
  • 问题内容: 我有一个带有2个下拉框的Wordpress网站。当我在第一个下拉框中选择一个选项时,我希望第二个选项被PHP函数中的数据刷新。为此,我需要ajax。但是我正在努力将Ajax绑定到Wordpress中。 HTML看起来像这样: 现在,例如,当用户选择“销售”时,我希望第二个选择标签重新加载来自PHP数组的匹配价格。 PHP函数如下所示: 我将jQuery Ajax调用保存在单独的.js文

  • 我是phonegap新手,想安装一个插件。有许多网站解释如何使用command

  • 我是VST开发的新手。我想实现http://www.cloneensemble.com/比如C#中的功能。这是一个VST插件。 有两种方法可以做到这一点。 在我的项目中使用他们的DLL,通过调用DLL的一些函数并对输入应用效果,以某种方式为DLL提供输入 以上任何一种情况我都不知道怎么做请帮忙。

  • 我是c语言的Java新手,我一直在努力熟悉这门语言。我正在尝试使用IntelliJ IDEA的lombok插件,但它似乎根本不适合我: 这是我的IDEA未能识别"@value"注释的截图 Lombok已经安装在我的IDEA上,我已经尝试过几次恢复我的ide的默认设置,但我仍然得到同样的错误: 这是我的ide上安装lombok插件的截图 我使用的是IntelliJ IDEA 2021.2.2(终极版

  • 问题内容: 我有一个PrimeFaces Web应用程序。当我手动添加jQuery和如下所示的插件时, 然后PrimeFaces组件会失去其功能和某些样式。例如,不显示,不滑动,丢失填充等。 这是怎么引起的,我该如何解决? 问题答案: PrimeFaces已经附带捆绑了jQuery的产品,但是您已经下载并安装了另一个仅与PrimeFaces捆绑的jQuery冲突的产品。我敢肯定,如果您对Web浏览

  • 我用CRA建立了一个React项目。我需要使用一个使用jquery构建的插件。它是一个日期选择器,但它使用的日历是Bikram Sambat。日期选择器代码的链接是尼泊尔日期选择器。我已经做了以下工作: 公共/index.html 配置组件 日期选择器没有出现。