Gradle中文用户组程序员技术干货

[Gradle中文教程系列]-跟我学Gradle-7.4:打包

2017-08-09  本文已影响471人  PKAQ

上一篇:为Web工程打不同环境包

通过配置文件支持多环境构建

除了通过传入参数加载不同目录下的properties文件来实现多环境打包之外,还有一种更便捷的方式来实现这种操作.
借助Groovy的ConfigSlurper特性可以简洁而明快的达到多环境打包的目的.打包时候仅需通过-D参数传入目标环境变量即可如:gradle build -Denv=dev,这里可以通过添加gradle.properties文件设置默认的环境变量值.

比如当前有如下需求:

1.与build.gradle平级建立config.groovy,这里的命名可以随意.

environments {
    // 开发环境
    dev {
        db {
            username = "dev"
            password = 'devpwd'
        }        
    }
    // 线上环境
    production { 
        db {
            username = "prod"
            password = 'prodpwd'
        }        
    }
}

2.修改build.gradle

引入ReplaceToken

import org.apache.tools.ant.filters.ReplaceTokens

处理资源文件时进行加载替换

processResources {
    println "==> Load configuration for $env"
    def config =  new ConfigSlurper(env).parse(file("config.groovy").toURI().toURL()).toProperties()
    
   from(sourceSets.main.resources.srcDirs) {
        filter(ReplaceTokens, tokens: config, beginToken : '${', endToken : '}')
    }
    
}

默认情况下ReplaceTokens会将@attribute@的值替换成目标值,这里我们修改占位描述符为${attribute}

经过上面的操作,在执行打包命令时,Gradle会加载config.groovy文件中的配置对src/main/resources资源目录下的资源文件进行替换,注意这里替换的是所有资源文件(properties/xml/txt等)中的占位符,如果只想替换properties文件可以添加过滤限制来实现对部分文件内容的替换

法1.

  from(sourceSets.main.resources.srcDirs) {
       filesMatching('**/*.properties') {
        filter(ReplaceTokens, tokens: config, beginToken : '${', endToken : '}')
       }
    }

法2.

  from(sourceSets.main.resources.srcDirs) {
        include '**/*.properties'       
        filter(ReplaceTokens, tokens: config, beginToken : '${', endToken : '}')
    }

完整代码在此:
https://github.com/GradleCN/GradleSide/tree/master/12-env/02-configfile

上一篇下一篇

猜你喜欢

热点阅读