java基础---->自定义gradle的插件
这里面简单的介绍一下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的插件的更多相关文章
- AS 自定义 Gradle plugin 插件 案例 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- java基础|自定义java线程池
线程池创建的参数 在创建线程的各种方式中我们有讲到过通过创建线程池来完成异步操作,但实际上jdk提供的Executors来创建线程池都还有些缺陷,线程池有以下几个参数: 代码节选自源码ThreadPo ...
- 手把手带你自定义 Gradle 插件 —— Gradle 系列(2)
请点赞加关注,你的支持对我非常重要,满足下我的虚荣心. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友 ...
- Gradle的构建过程都不会?带你全面了解Android如何自定义Gradle 插件
目前 Android 工程的默认构建工具为 Gradle,我们在构建 APK 的时候往往会执行 ./gradlew assembleDebug 这样的命令.. 那么这个命令到底代表着什么含义呢?命令的 ...
- Java基础笔记 – Annotation注解的介绍和使用 自定义注解
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
- Java基础-类加载机制与自定义类Java类加载器(ClassLoader)
Java基础-类加载机制与自定义类Java类加载器(ClassLoader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于类加载器的概念和分类我就不再废话了,因为我在之前的笔 ...
- Java基础语法(自定义类、ArrayList集合)
Java基础语法 今日内容介绍 u 自定义类 u ArrayList集合 第1章 引用数据类型(类) 1.1 引用数据类型分类 提到引用数据类型(类),其实我们对它并不陌生,如使用过的Scanner类 ...
- Java基础__Java中自定义集合类
Java基础__Java中集合类 传送门 自定义MyArrayList集合实现:增加数据.取数据.查看集合中数据个数方法 package com.Gary; public class MyArrayL ...
- VS Code Java 更新 – 全新Gradle for Java插件,更方便的代码操作, 1.0 语言支持发布
大家好,欢迎来到 9 月版的 Visual Studio Code Java 更新.在这篇文章中,我们将分享我们最新的Gradle插件,更加方便的代码操作(Getter/Setter等等),以及最近的 ...
随机推荐
- JQ02
JQ02 1.css操作 .css(属性名,属性值)://要有双引号 修改单个样式,若要修改多个,需采用以下方式: 以对象为参数 它还可以获取样式: .css("属性名") 若元素 ...
- JS自学笔记05
JS自学笔记05 1.例题 产生随机的16进制颜色 function getColor(){ var str="#"; var arr=["0","1 ...
- JDBC(13)—JDBC调用存储过程和函数
步骤: JDBC调用存储过程和函数 步骤: ①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的pre ...
- securecrt通过ssh连接板子: 密钥交换失败,没有兼容的加密程序
在用securecrt连接板子时遇到如下问题: 需要修改板子上的/etc/ssh/ssh_config和/etc/ssh/sshd_config. 修改/etc/ssh/ssh_config,取消下面 ...
- 更新 app 操作过期提示
增加的操作过期提示,再让用户选择是否登录,登录成功后自动返回上一次操作的面页
- 11、TopN实战
1.Java版本: 1.1.取前3 package sparkcore.java; import java.util.List; import org.apache.spark.SparkConf; ...
- vue 父子组件的方法调用
$emit 子组件触发父组件的方法: <!-- 子组件 --> <template> <div id="child"> <button @ ...
- SpringBoot(十二):springboot2.0.2写测试用例
导入maven依赖: <dependency> <groupId>junit</groupId> <artifactId>junit</artif ...
- [CSS] Useful CSS tool for Web designer and developer
1. Color Picker (Chrome) You might know how to use color picker in Chrome, recently there is a featu ...
- 使用docker搭建gitlab版本控制系统
1. GitLab 简介 GitLab 是一款基于 git 的开源代码仓库系统 GitLab 与著名的 GitHub 最大的区别就是: 允许我们搭建自己的 git 代码私有仓库,非常方便 2 ...