【发布时间】:2022-07-23 03:30:39
【问题描述】:
如何将插件配置应用到构建外部的 Gradle 项目,使其不包含在 Git 源代码控制中?
详情
我有一个 Gradle 项目,它使用 gradle-git-properties 插件根据项目的 Git 详细信息生成 git.properties 文件。
plugins {
id 'java'
id 'com.gorylenko.gradle-git-properties'
}
// Rest of build.gradle goes here
此外,我正在使用git working trees 将我的项目检出到本地的多个位置。但是,根据gradle-git-properties#14,使用 gradle-git-properties 的项目在从链接的工作树运行时会失败。
$ ./gradlew generateGitProperties
> Task :subproject:generateGitProperties FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':subproject:generateGitProperties'.
> Error while evaluating property 'generatedProperties' of task ':subproject:generateGitProperties'
> gradlegitproperties.org.eclipse.jgit.errors.RepositoryNotFoundException: repository not found: /Users/Me/my-project/.git/worktrees/my-project
我一直在使用插件配置来解决这个问题,允许项目在从链接的工作树运行时成功构建:
gitProperties {
Path dotGitPath = rootProject.layout.projectDirectory.asFile.toPath().resolve(".git")
if (Files.isRegularFile(dotGitPath)) {
Files.lines(dotGitPath).withCloseable { ditGitFileLines ->
dotGitDirectory = ditGitFileLines
.filter { it.startsWith("gitdir: ") }
.map { it.substring('gitdir: '.length(), it.lastIndexOf('/.git/')) }
.map { project.objects.directoryProperty().convention(project.layout.projectDirectory.dir(it)) }
.findFirst()
.orElse(project.objects.directoryProperty().convention(project.layout.projectDirectory.dir(".git")))
}
}
}
这个解决方案的问题是它需要修改构建文件。这是一个共享存储库,我是唯一一个使用多个 git 工作树访问它的人。因此,我不想在构建本身中包含此解决方法。
有没有一种方法可以自动将此插件配置从外部应用到构建文件或将与项目一起提交的任何其他文件?
【问题讨论】:
标签: git gradle gradle-plugin