首页 > 解决方案 > Gradle:无法使用 shell 命令初始化变量

问题描述

我想通过build.gradle文件中的一些 shell 命令初始化一些变量

def YEAR_MONTH_DAY=['date +%F'].execute().text.trim()
def BUILD_DATE=['date -u +%FT%T.%3NZ)'].execute().text.trim()
def IMAGE_NAME ='bca/cab-imaging'
def SHORT_VCS_REF=['git rev-parse --short HEAD'].execute().text.trim()
def VERSION=YEAR_MONTH_DAY+'-'+SHORT_VCS_REF

但我明白了

> Cannot run program "date +%F": error=2, No such file or directory

我究竟做错了什么?如何通过 shell 命令初始化变量?

我也试过

def YEAR_MONTH_DAY= new ByteArrayOutputStream()
exec{
    commandLine "sh","date +%F"
    standardOutput = YEAR_MONTH_DAY;
}

但我得到了

> Process 'command 'sh'' finished with non-zero exit value 127

标签: shellvariablesgradlebuild.gradle

解决方案


我是这样做的

project.ext.IMAGE_NAME='bca/cab-imaging'
project.ext.BUILD_DATE= new Date().format("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
project.ext.YEAR_MONTH_DAY=new Date().format('yyyy-MM-dd')
project.ext.SHORT_VCS_REF=new ByteArrayOutputStream()
    exec{
        commandLine 'git','rev-parse', '--short', 'HEAD'
        standardOutput = SHORT_VCS_REF;
    }
project.ext.VERSION=project.YEAR_MONTH_DAY+"-"+"$SHORT_VCS_REF"

然后我可以访问它们project.VERSION等。


推荐阅读