有没有办法让gradle在$ path中执行命令行

时间:2016-03-29 00:59:50

标签: gradle path

我想编写一个运行ruby(sass)的gradle脚本。我现在的方式是

task compileCss (type: Exec){
def dir = ""
if (System.properties['os.name'].toLowerCase().contains('windows')) {
    dir = "C:\\ruby22\\bin\\sass.bat"
} else {
    dir = "/usr/bin/sass"
}
   commandLine dir, '--update', 'source.scss:dest.css'
}

我不喜欢这个代码,因为有人可能会在非标准的情况下安装红宝石"目录(例如/ usr / local / bin :))。

有没有办法查看sass是否在路径中并使用该特定的sass?

1 个答案:

答案 0 :(得分:0)

创建一个任务以在路径中查找sass:

import org.apache.tools.ant.taskdefs.condition.Os

task checkForSassInPath(type: Exec) {
    def windows = Os.isFamily(Os.FAMILY_WINDOWS)
    executable =  windows ? "where" : "which"
    args = [(windows ? "sass.bat" : "sass")]
    ignoreExitValue = true
    standardOutput = new ByteArrayOutputStream()
    errorOutput = new ByteArrayOutputStream()
}
checkForSassInPath << {
    project.ext.sassInPath = (execResult.exitValue == 0)
    if (!project.sassInPath ) {
        logger.warn "Cannot find sass in path";
    }
}

然后你可以这样做:

task compileCss (type: Exec, dependsOn: checkForSassInPath){
    def dir
    if ( Os.isFamily(Os.FAMILY_WINDOWS) ) {
        dir = project.sassInPath ? "sass.bat" : "C:\\ruby22\\bin\\sass.bat"
    } else {
        dir = project.sassInPath ? "sass" : "/usr/bin/sass"
    }
    commandLine dir, '--update', 'source.scss:dest.css'
}