gradle三角形依赖于另一个项目

时间:2013-12-28 11:30:01

标签: git gradle build-dependencies

我花了很多时间来解决我的想法,因为我认为通常的项目结构很常见,但找不到合适的解决方案。

项目结构:

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问题)它对我来说很好。

2 个答案:

答案 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”。 “构建”和“安装”任务的含义:

您可能希望自动编译/安装来自多个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设置。它可以为您节省大量时间和精力:))