Проблема Gradle с несколькими двойными кавычками в Exec на Windows - PullRequest
0 голосов
/ 03 июня 2019

Я пытаюсь создать простую задачу Gradle для выполнения SQL-запроса. Команда, которую я пытаюсь выполнить:

UPDATE user_account SET user_password = 'xyz'

Полная командная строка выглядит следующим образом:

"c:\Program Files\MariaDB 10.3\bin\mysql.exe" --user=dbUser --password=dbPass-D dbName -e "UPDATE user_account SET user_password = 'xyz'"

Эта команда отлично работает из командной строки. Однако это не работает из задачи Gradle Exec:

task updatePasswords(type:Exec) {
    def sql = "UPDATE user_account SET user_password = 'xyz'"
    def myCmd = '"' + dbSqlExe + '" --user=' + dbUser + ' --password=' + dbPass + ' -D ' + dbDb + ' -e "' + sql + '"'
    println 'Update cmd: ' + myCmd
    commandLine 'cmd', '/c', myCmd

    ignoreExitValue = true
}

Где

def dbSqlExe = "c:\\Program Files\\MariaDB 10.3\\bin\\mysql.exe"

Эта задача сообщает об ошибке:

'c:\Program' is not recognized as an internal or external command, operable program or batch file.

Если я удаляю двойные кавычки вокруг запроса sql, то mysql.exe будет найден, но команда больше не действительна, поскольку mysql требует двойных кавычек вокруг запроса SQL.

Я пробовал решение в этой теме: gradle: Выполнить задачу "type: Exec" с множеством аргументов с пробелами без успеха.

Любой совет, как мне отформатировать мою задачу?

1 Ответ

0 голосов
/ 04 июня 2019

Попробуйте это

task updatePasswords(type:Exec) {
    def sql = "UPDATE user_account SET user_password = 'xyz'"
    commandLine = ['cmd', '/c', '"' + dbSqlExe + '"', "--user=$dbUser", "--password=$dbPass", '-D', dbDb, '-e', sql] 
    ignoreExitValue = true
    doFirst {
        println "Executing $commandLine" 
    } 
}  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...