Как передать среду gradle exec

Как я могу передать переменные Exec во время выполнения? Я хочу написать проход через файл gradle, который будет выполнять мои текущие команды сборки, которые позволяют мне перемещать конфигурацию из планов сервера сборки в управляемую сборку управления версиями.файл gradle. Это также часть моего знакомства с gradle в рамках подготовки к более крупным проектам.

Я хочу, чтобы команды выполнялись с использованием разных переменных для конфигураций. В ant я бы установил свои свойства, а затем передал их exec через вложенные блоки env. В gradle я заполняю карту, которую я объединяю с окружением задачи, но это не работает.

Я не могу добавить "

пожалуйста, предложите предложения или укажите мне в правой части руководства/документов.

построить.Gradle в - Gradle в исполнение checkenv

def buildEnvironmentVariables = [:]
task setEnv() << {
    buildEnvironmentVariables['JAVA_OPTS']="-XX:ErrorFile=foo/logs" 
}

task checkenv(dependsOn: 'printEnv', type:Exec) {
    workingDir '../..'
    executable = 'cmd'
    environment << buildEnvironmentVariables
    println "buildEnvironmentVariables = " << buildEnvironmentVariables['JAVA_OPTS']
    args = ['/c','set','JAVA_OPTS']
}

должен ли я добавлять задачу в проект только тогда, когда она эквивалентна "цели" и инкапсулирует действия, такие как exec в задачах верхнего уровня?

добавленная задача похожа на цель ant, а инкапсулированные задачи - на задачу ant?

def buildEnvironmentVariables = [:]
task setEnv() << {
    buildEnvironmentVariables['JAVA_OPTS']="-XX:ErrorFile=foo/logs" 
}

task checkenv(dependsOn: 'printEnv') << {
    println "buildEnvironmentVariables = " << buildEnvironmentVariables['JAVA_OPTS']
    ext.check = exec() {
        workingDir '../..'
        executable = 'cmd'
        environment << buildEnvironmentVariables
        args = ['/c','set','JAVA_OPTS']
    }
}

спасибо

2 ответов


вероятно, лучше начать с чистого листа:

task doSomething(type: Exec) {
    workingDir ...
    executable ...
    args ...
    environment JAVA_OPTS: "-XX:ErrorFile=foo/logs"
}

затем вы можете запустить эту задачу с помощью gradle doSomething. Это достижения ваших целей?


хорошо, вот курс, который я в конечном итоге последовал, используя шаблоны, предложенные Питером Н.

  • определить / использовать процедуры для обнаружения ОС и Arch
  • метод настройки среды для всех задач exec во время настройки
  • пример задачи exec

.........

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

def is64Arch() {
    return System.properties['os.arch'].toLowerCase().contains('64')
}

task configureEnvironment() {
    def envVars = [:]


    envVars['JAVA_OPTS']="-Dlog.directory=target/logs -Djava.awt.headless=true -XX:ErrorFile=target/logs"

    if (is64Arch()) 
    {
        envVars['JAVA_OPTS'] +=" -Xmx2048m -XX:MaxPermSize=768m" 
        println "*** ARCH: 64"
    }
    else
    {
        envVars['JAVA_OPTS'] +=" -Xmx1792m -XX:MaxPermSize=512m" 
        println "*** ARCH: 86"
    }

    tasks.withType(Exec) { environment << envVars }

}


task checkJavaEnvVars(type:Exec)  {
    workingDir '../..'
    commandLine 'cmd','/c','set JAVA'
}