Как передать среду 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'
}