我有一个类似的Gradle脚本:
ext {
dir = null
}
task init << {
build()
}
task buildAll(type: Exec){
workingDir ext.dir
commandLine 'cmd', '/c', "echo %JAVA_HOME%"
}
def build(){
ext.dir = "asdf"
buildAll.execute()
}
当我运行脚本时,我得到:
groovy.lang.MissingPropertyException: Cannot get property 'dir' on extra properties extension as it does not exist
无论我做了什么,我都无法从&#34; ext&#34;中读取任何财产。它可以从方法中看到(例如&#34; build()&#34;在我的例子中),但不是来自除默认任务之外的任何其他任务(&#34; init&#34;在我的例子中)。
我明白&#34;分机&#34;属性应该可以从项目内的任何地方访问,所以我做错了什么?
更新 我试图实现的工作流程(由Opal提出):
我需要使用一个脚本构建几个环境。这些环境中的每一个都列在CSV文件中,其中包含以下行:<environment>,<version>
。
然后脚本需要执行以下操作:
${ANT_HOME}/bin/ant -f $checkedOutCodeDirectory/Build/build-all.xml target1
,然后target2
和target3
)这需要针对每个环境执行
答案 0 :(得分:8)
应该通过ext
创建额外的属性,但是通过project
实例引用,而不需要任何实例:project.dir
或dir
,因此对脚本的第一次更改将是:
ext {
dir = null
}
task init << {
build()
}
task buildAll(type: Exec){
workingDir dir // ext.dir -> dir
commandLine 'cmd', '/c', "echo %JAVA_HOME%"
}
def build(){
ext.dir = "asdf"
buildAll.execute()
}
现在,在执行任何任务或方法之前,会读取并解析脚本,在{em>运行任何其他部分之前,将buildAll
的整个部分配置 。因此它总是会失败,因为dir
属性没有价值。证明:
ext {
dir = null
}
task init << {
build()
}
task buildAll(type: Exec){
workingDir dir ? dir : project.rootDir
commandLine 'cmd', '/c', "echo %JAVA_HOME%"
}
def build(){
ext.dir = "asdf"
buildAll.execute()
}