您如何支持Mac和PC上的Gradle Exec任务?

vjrehmav  于 2022-11-14  发布在  Mac
关注(0)|答案(3)|浏览(174)

如果命令采用不同的形式,是否有方法能够在Windows和Mac上执行任务?例如:

task stopTomcat(type:Exec) {

    // use this command line if on Windows
    commandLine 'cmd', '/c', 'stop.cmd'

    // use the command line if on Mac
    commandLine './stop.sh'
}

在Gradle中,您会如何做到这一点?

ltqd579y

ltqd579y1#

您可以根据系统属性的值,有条件地设定commandLine属性。

if (System.getProperty('os.name').toLowerCase(Locale.ROOT).contains('windows')) {
    commandLine 'cmd', '/c', 'stop.cmd'
} else {
    commandLine './stop.sh'
}
4uqofj5v

4uqofj5v2#

如果脚本或可执行文件在windows和linux上是相同的,那么你就可以执行以下操作,这样你就只需要通过调用一个函数来定义一次参数:

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

       task executeCommand(type: Exec) {    
            commandLine osAdaptiveCommand('aws', 'ecr', 'get-login', '--no-include-email')
       }

       private static Iterable<String> osAdaptiveCommand(String... commands) {
            def newCommands = []
            if (Os.isFamily(Os.FAMILY_WINDOWS)) {
                newCommands = ['cmd', '/c']
            }

            newCommands.addAll(commands)
            return newCommands
       }
yhived7q

yhived7q3#

我指的是这里。https://stackoverflow.com/a/31443955/1932017

import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform

task stopTomcat(type:Exec) {
    if (DefaultNativePlatform.currentOperatingSystem.isWindows()) {
        // use this command line if on Windows
        commandLine 'cmd', '/c', 'stop.cmd'
    } else {
        // use the command line if on Mac
        commandLine './stop.sh'
    }
}

相关问题