我的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函数上输入了一些无限递归,但仅在构建项目时,而不是在手动运行任务时。