码迷,mamicode.com
首页 > 编程语言 > 详细

java基础---->自定义gradle的插件

时间:2019-01-08 22:52:39      阅读:304      评论:0      收藏:0      [点我收藏+]

标签:sage   rop   一个   ola   2-2   obj   ring   apply   简单的   

  这里面简单的介绍一下gradle插件的编写。

 

自定义gradle插件

我们编写的gradle脚本一般是放在build.gradle文件中。所以首先创建一下build.gradle文件,下面的例子都是在此文件中。

一、简单的gradle插件

class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        project.task(hello) {
            doLast {
                println Hello from the GreetingPlugin
            }
        }
    }
}
apply plugin: GreetingPlugin

运行结果:

技术分享图片

 

二、 编写可配置的插件

class GreetingPluginExtension {
    String message
    String greeter
}

class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        def extension = project.extensions.create(greeting, GreetingPluginExtension)
        project.task(hello) {
            doLast {
                println "${extension.message} from ${extension.greeter}"
            }
        }
    }
}
apply plugin: GreetingPlugin

greeting {
    message = Hello
    greeter = huhx
}

 运行结果:

技术分享图片

 

三、编写与文件交互的插件

class GreetingToFileTask extends DefaultTask {

    def destination

    File getDestination() {
        project.file(destination)
    }

    @TaskAction
    def greet() {
        def file = getDestination()
        file.parentFile.mkdirs()
        file.write Hello!
    }
}

task greet(type: GreetingToFileTask) {
    destination = { project.greetingFile }
}

task sayGreeting(dependsOn: greet) {
    doLast {
        println file(greetingFile).text
    }
}

ext.greetingFile = "$buildDir/hello.txt"

运行结果:并且在2018-12-28/build目录下面生成一个hello.txt,里面的内容是Hello。

技术分享图片

 

四、编写带有拓展功能的插件

class GreetingPlugin implements Plugin<Project> {
    void apply(Project project) {
        def extension = project.extensions.create(greeting, GreetingPluginExtension, project)
        project.tasks.create(hello, Greeting) {
            message = extension.message
            outputFiles = extension.outputFiles
        }
    }
}

class GreetingPluginExtension {
    final Property<String> message
    final ConfigurableFileCollection outputFiles

    GreetingPluginExtension(Project project) {
        message = project.objects.property(String)
        message.set(Hello from GreetingPlugin)
        outputFiles = project.layout.configurableFiles()
    }

    void setOutputFiles(FileCollection outputFiles) {
        this.outputFiles.setFrom(outputFiles)
    }
}

class Greeting extends DefaultTask {
    final Property<String> message = project.objects.property(String)
    final ConfigurableFileCollection outputFiles = project.layout.configurableFiles()

    void setOutputFiles(FileCollection outputFiles) {
        this.outputFiles.setFrom(outputFiles)
    }

    @TaskAction
    void printMessage() {
        outputFiles.each {
            logger.quiet "Writing message ‘Hi from Gradle‘ to file"
            it.text = message.get()
        }
    }
}

apply plugin: GreetingPlugin

greeting {
    message = Hi from Gradle
    outputFiles = layout.files(a.txt, b.txt)
} 

运行结果:并且在2018-12-28目录下面生成a.txt和b.txt,文件的内容均为:Hi from Gradle

技术分享图片

 

友情链接

 

java基础---->自定义gradle的插件

标签:sage   rop   一个   ola   2-2   obj   ring   apply   简单的   

原文地址:https://www.cnblogs.com/huhx/p/baseusejavacustomgradleplugin.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!