Android Studio - Gradle任务在绑定到preBuild时会产生StackOverflowError

时间:2017-01-19 23:39:49

标签: android gradle groovy grgit

我的Android build.gradle上有一个任务,它应该将源代码从我的git存储库下载到特定目录(如果它不存在),并在克隆后签出到特定分支(如果是repo已经克隆,进行获取然后结账)。我正在使用GrGit 1.6.0版。

以下是我的任务代码:

task downloadRepoSrc << {
    def branch = "development"
    def pathToClone = "path/to/clone/"
    def uriToRepo = "git@restofurihere"
    try {
        // Try to open repository if it exists
        def grgit = Grgit.open(dir: pathToClone)
        grgit.fetch()
        if (grgit.branch.list().find {it.name == branch}) {
            grgit.checkout(branch: branch)
        } else {
            grgit.checkout(branch: branch, startPoint: "origin/$branch", createBranch: true)
        }
    } catch (RepositoryNotFoundException ignored) {
        // Repository not found. Try to clone it.
        def grgit = Grgit.clone(dir: pathToClone, uri: "uriToRepo")
        grgit.checkout(branch: branch, startPoint: "origin/$branch", createBranch: true)
    } catch (Exception e) {
        e.printStackTrace()
    }
}

我还将任务绑定到preBuild任务,以便每次构建项目时都会运行它,如下所示:

preBuild.dependsOn downloadRepoSrc

每当我在Android studio的界面上手动运行任务时,它都能完美运行。但是,每当我尝试构建项目时,都会收到以下错误消息:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':native-myproject:downloadRepoSrc'.
> java.lang.StackOverflowError (no error message)

我无法理解为什么在构建项目时任务会失败,而不是在手动运行时失败。我的目标是自动生成依赖项目的构建过程,前提是我在git上输入正确的分支/标签来检查。目前,我需要记住每次我想使用不同的分支/标签时手动运行任务,这可行,但不是最佳的。

任何有关可能出错的帮助或提示都将不胜感激。如果您需要更多详情,请告诉我。

编辑:这是使用--stacktrace选项运行gradle时输出的堆栈跟踪。我会在pastebin中将其链接起来,因为它很长。似乎它在resolveBranch函数上输入了一些无限递归,但仅在构建项目时,而不是在手动运行任务时。

0 个答案:

没有答案