我有一个build.gradle文件,它将一些SVNKit调用到svn export
组成Gradle多项目的一些目录。
我有一个专门用于执行此操作的任务,如下所示:
task checkoutIntoDir() << {
mkdir 'dirForSvnProjects_2014_07_17_19_50' // timestamp not hard-coded ;)
// prompt for username/password
// run svn export which places projects in dirForSvnProjects_2014_07_17_19_50
}
使用依赖于它的另一个GradleBuild
任务:
task buildCheckedOutStuff(type: GradleBuild, dependsOn: checkoutIntoDir) {
dir = "dirForSvnProjects_2014_07_17_19_50/svnProjectIExported"
tasks = ['buildMyProj']
}
但是当它到达那里时它会说task 'buildMyProj' not found in root project
。现在,如果我在开始构建之前取出任务依赖项checkoutIntoDir
并在一个目录上运行它,它可以正常工作。我猜我需要运行某种&#34;重新配置&#34;使项目了解dirForSvnProjects_2014_07_17_19_50
中的新gradle项目?
答案 0 :(得分:0)
我终于明白了。
这实际上与我设置变量的方式有关,而与Gradle无关。
我定义了一个createDir
任务,用于设置在脚本的“根”级别定义(但未设置)的变量。它看起来像这样:
def myBuildDir
task createDir << {
def nowDate = String.format('%tY_%<tm_%<td_%<tH_%<tM',Calendar.instance)
myBuildDir= "_build_$nowDate"
mkdir myBuildDir
}
task checkoutIntoDir(dependsOn: createDir) << {
// prompt for username/password
// run svn export which places projects in myBuildDir
}
正如Perryn Fowler在评论中指出的那样,任何不在doLast
(或<<
速记)类型块中的块都将在createDir
时的配置时运行在运行时运行。因此,没有为buildCheckedOutStuff
任务设置变量。
所以我只是更改它以在根目录设置日期并且它有效:
def nowDate = String.format('%tY_%<tm_%<td_%<tH_%<tM',Calendar.instance)
def eqipBuildDir = "_build_$nowDate"
task createDir << {
mkdir eqipBuildDir
}
这就是我为了简洁而遗漏的东西!