如何在执行期间将变量传递给Exec?我想编写一个传递gradle文件,该文件将执行我当前的构建命令,这样我就可以将配置从构建服务器计划移动到源代码管理的build.gradle文件.这也是我为更大的项目做准备而了解gradle的一部分.
我想使用不同的变量执行命令以进行配置.在ant中,我设置了我的属性,然后通过嵌套的env块将它们传递给exec.在gradle中,我正在填充一个我与任务环境合并的地图,但这不起作用.
我无法在checkenv中添加"<<",因此任务代码执行之前的buildEnvironmentVariables被填充或者位于错误的范围内.我知道我没有按照正确的任务配置.
请提供建议或指出我在手册/文档的正确部分.
build.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']
}
Run Code Online (Sandbox Code Playgroud)
我是否应该只在项目中添加一个任务,当它相当于"目标"并封装顶级任务中的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']
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
Pet*_*ser 30
从干净的石板开始可能更好:
task doSomething(type: Exec) {
workingDir ...
executable ...
args ...
environment JAVA_OPTS: "-XX:ErrorFile=foo/logs"
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以运行此任务gradle doSomething.这会实现你的目标吗?
好的,这是我最终使用 Peter N. 建议的模式遵循的课程
…………
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'
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23414 次 |
| 最近记录: |