栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

gradle构建工具学习系列–009task规则命名模式

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

gradle构建工具学习系列–009task规则命名模式


gradle构建工具学习系列


假如想通过两个task扩展版本管理功能:一个用来增加项目的主版本,另一个用于增加项目的次版本,它们的实现如下所示

task incrementMajorVersion(group: 'versioning', description: 'Increments project major version.') << {
    String currentVersion = version.toString()
    ++version.major
    String newVersion = version.toString()
    logger.info "Incrementing major project version: $currentVersion -> $newVersion"

    ant.propertyfile(file: versionFile) {
        entry(key: 'major', type: 'int', operation: '+', value: 1)
    }
}

task incrementMinorVersion(group: 'versioning', description: 'Increments project minor version.') << {
    String currentVersion = version.toString()
    ++version.minor
    String newVersion = version.toString()
    logger.info "Incrementing minor project version: $currentVersion -> $newVersion"

    ant.propertyfile(file: versionFile) {
        entry(key: 'minor', type: 'int', operation: '+', value: 1)
    }
}

两个独立的task工作其实基本大同小异,完全可以在一个方法中实现。在Gradle当中引入了task规则的概念,根据task名称模式执行特定的逻辑,该模式由两部分组成:task名称的静态部分和一个占位符,联合起来组成了一个动态的task名称。如果你想将task规则应用于前面的例子中,那么命名看起来应该是: incrementVersion 。在命令行执行这个task,将以驼峰命名法指定类别占位符,比如incrementMajorVersion或者incrementMinorVersion。

Gradle的一些核心插件充分的利用了task规则,Java插件定义的task规则之一是clean,用来删除指定task的输出。比如,在命令行运行gradle cleanCompileJava会删除所有产品代码的class文件

声明task规则

为了给项目添加task规则,首先需要获得对TaskContainer的引用,一旦拥有了这个引用,就可以调用addRule方法了。分别如下图所示


这个方法包含有两个引用,第一个参数提供了描述信息(比如,task命名模式),第二个参数声明了要执行的闭包来引用规则。代码如下所示

tasks.addRule("Pattern: incrementVersion – Increments the project version classifier.") { String taskName ->
    if (taskName.startsWith('increment') && taskName.endsWith('Version')) {
        task(taskName){
			doLast {
				String classifier = (taskName - 'increment' - 'Version').toLowerCase()
				String currentVersion = version.toString()

				switch (classifier) {
					case 'major': ++version.major
						break
					case 'minor': ++version.minor
						break
					default: throw new GradleException("Invalid version type '$classifier. Allowed types: ['Major', 'Minor']")
				}

				String newVersion = version.toString()
				logger.info "Incrementing $classifier project version: $currentVersion -> $newVersion"

				ant.propertyfile(file: versionFile) {
					entry(key: classifier, type: 'int', operation: '+', value: 1)
				}
			}
        }
    }
}

在项目中添加task规则之后,你会发现当运行gradle tasks时会列出一个具体的task组Rules:

task规则不能像处理其他的简单的task或增强的task一样被独立分组。task规则即使通过插件声明了,它也将永远显示在Rules组下。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678489.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号