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

gradle构建工具学习系列–011在buildSrc目录下构建代码

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

gradle构建工具学习系列–011在buildSrc目录下构建代码


gradle构建工具学习系列


在前面几章当中,在构建脚本当中定义了两个Groovy类:ProjectVersion和自定义的task ReleaseVersionTask。这些类最适合被移到项目的buildSrc目录下。将构建代码放到buildSrc目录下是一个良好的软件开发实践。

Gradle在buildSrc目录下使源文件结构标准化。Java代码需要被放在src/main/java目录下,Groovy代码则放在src/main/groovy目录下,位于这个目录下的代码都会被自动编译,并且被加入到Gradle构建脚本的classpath中,buildSrc目录是组织代码的最佳方式。因为要处理这些类,所以也可以把它们放到指定的包下,比如com.manning.gia包的一部分。

最后文件内容分别如下所示
buildSrc/src/main/groovy/com/manning/gia/ProjectVersion.groovy

package com.manning.gia

class ProjectVersion {
    Integer min
    Integer maj
    Boolean prodReady

    @Override
    String toString() {
        "$maj.$min${prodReady ? '' : '-SNAPSHOT'}"
    }
}

buildSrc/src/main/groovy/com/manning/gia/ReleaseVersionTask.groovy

package com.manning.gia

import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.OutputFile
import org.gradle.api.tasks.TaskAction

class ReleaseVersionTask extends DefaultTask {
    @Input Boolean release
    @OutputFile File destFile

    ReleaseVersionTask() {
        group = 'versioning'
        description = 'Makes project a release version.'
    }

    @TaskAction
    void start() {
        project.version.prodReady = true
        ant.propertyfile(file: destFile) {
            entry(key: 'release', type: 'string', operation: '=', value: 'true')
        }
    }
}

而构建脚本则不再包含类信息了

ext.versionFile = file('project-version.properties')

task loadVersion {
    project.version = readVersion()
}

ProjectVersion readVersion() {
    logger.quiet 'Reading the version file.'

    if (!versionFile.exists()) {
        throw new GradleException("Required version file does not exit: $versionFile.canonicalPath")
    }

    Properties versionProps = new Properties()

    versionFile.withInputStream { stream ->
        versionProps.load(stream)
    }

    new ProjectVersion(min: versionProps.major.toInteger(), maj: versionProps.minor.toInteger(), prodReady: versionProps.release.toBoolean())
}

task makeReleaseVersion(type: ReleaseVersionTask) {
    release = version.prodReady
    destFile = new File('project-version.properties')
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/678485.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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