如何在Gradle中强制重新配置项目?

时间:2014-07-17 23:52:39

标签: gradle

我有一个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项目?

1 个答案:

答案 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
}

这就是我为了简洁而遗漏的东西!