Подтвердить что ты не робот

Как вы поддерживаете задачу Gradle Exec для Mac и ПК?

Есть ли способ выполнить задачу как на 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?

4b9b3361

Ответ 1

Вы можете условно установить свойство commandLine на основе значения системного свойства.

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

Ответ 2

Если бы скрипт или исполняемый файл были одинаковыми в 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
       }