Properties Gradle中额外属性的范围?

Properties Gradle中额外属性的范围?,properties,gradle,build,Properties,Gradle,Build,我有一个与此类似的渐变脚本: 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() } 无论我尝试了什么,我都无法获得从“ext”读取属性的

我有一个与此类似的渐变脚本:

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()
}
无论我尝试了什么,我都无法获得从“ext”读取属性的任务。它可以从方法(如我的示例中的“build()”)中看到,但除了默认任务(“我的示例中的init”)之外,其他任何任务都不能看到它

我知道“ext”属性应该可以从项目内部的任何地方访问,那么我做错了什么

更新: 我正在尝试实现的工作流程(如Opal所要求的):

我需要用一个脚本构建多个环境。这些环境中的每一个都列在CSV文件中,并带有一行:

然后,脚本需要执行以下操作:

  • 删除现有目录
  • 将代码从SVN签出到新目录(目录和SVN url都取决于环境和版本)
  • 复制一些设置文件(路径取决于版本)
  • 编辑一些设置文件(值取决于环境和版本)
  • 设置一些环境变量(JAVA\u HOME、ANT\u HOME…)(取决于版本)
  • 运行三个构建命令(
    ${ANT_HOME}/bin/ANT-f$checkedoutcodeditory/build/build-all.xml target1
    ,然后运行
    target2
    target3

这需要为每个环境执行

额外的属性应该通过
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()
}

这就是为什么我想知道应该如何使用额外的属性。基本上,我想要一个全局变量。如何在Gradle中获取全局变量(不应考虑在引入额外属性之前使用的不推荐的解决方案)?因此在
ext
块中定义它,如果需要覆盖它,请使用
-P
命令行开关传递它。我已经在ext中定义了它。为了获得目录的路径(“dir”变量),我需要使用-P传递另外两个变量,这就是为什么我不能使用“dir”作为构建脚本的参数。哦,好吧…@zorglub76,你能准备一个真实世界的例子吗?如果我理解这个问题,我会帮助你更好。好的,我用我尝试自动化的工作流更新了原始问题。我是Gradle的新手,我想让脚本尽可能地渐变,但有一次我发现自己几乎在Groovy中做所有事情,而不是使用Gradle特性,因为出乎意料地(似乎)缺少Gradle特性。。。
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()
}
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()
}