我花了很多时间来解决我的想法,因为我认为通常的项目结构很常见,但找不到合适的解决方案。
项目结构:
some_local_dir_with_git_repos
git_repo_of_project_A/
build.gradle
git_repo_of_project_B/
build.gradle
git_repo_of_project_Core/
项目A和B应包括核心资源。
“some_local_dir_with_git_repos”不在Git下,所以我不想在其中添加任何settings.gradle。
有优雅的解决方案吗?
增加:
感谢@ peter-niederwieser和他提供的链接(他的答案 - https://stackoverflow.com/a/20807550/1336772)。
我完成了我的设置.A和B项目的渲染类似:
include ':Core'
project(':Core').projectDir = new File('../git_repo_of_project_Core/')
并将这些行添加到build.gradle:
dependencies {
compile project(':Core')
}
'文件 - >之后无效缓存/重新启动'(解析'无法在Android Studio中解决符号'问题)和'构建 - >重建项目'(解决ClassNotFoundException问题)它对我来说很好。
答案 0 :(得分:2)
一个好的指导方针是将版本化的内容整合在一起。因此,如果您有三个Git存储库,那么您将拥有三个构建版本,并且它们将通过二进制存储库(例如Artifactory或Nexus)交换工件。
如果你必须有一个构建跨越多个Git存储库,一些选项是使用Git子模块创建一个超级存储库,通过settings.gradle
传递--settings-file
的位置,或者运行来自包含settings.gradle
的目录。此外,您可能必须配置项目目录的位置,如defining subprojects in a deeply nested directory tree。
答案 1 :(得分:1)
将一个存储库的源包含在另一个存储库中意味着基础架构出现问题。正如@ peter-niederwieser所提到的,在二进制工件(不是源代码)的层次上重用代码是正常的。
通常,您可以在git_repo_of_project_Core上执行“gradle build install”,在git_repo_of_project_A和git_repo_of_project_B上执行“gradle build”。 “构建”和“安装”任务的含义:
“build”本质上是编译项目(或一组项目)。 “构建”涉及许多任务,完整参考此处:http://www.gradle.org/docs/current/userguide/java_plugin.html
“install”任务将已编译的jar安装到本地maven缓存中
您可能希望自动编译/安装来自多个git-repositories的多个项目。 Gradle是一个完美的工具(恕我直言),因为它与项目本质无关,并且可以通过插件进行扩展。两个功能对多存储库设置特别有用:
GradleBuild任务,它允许gradle脚本针对指定目录或“build.gradle”文件启动另一个构建(甚至任意任务)。
org.ajoberstar:gradle-git gradle插件,它实现了一组gradle任务,处理git。
请看一下multiproject-git-gradle脚本(https://github.com/akhikhl/multiproject-git-gradle) - 它实现了强大的DSL,用于配置多项目gradle / git设置。它可以为您节省大量时间和精力:))