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