1

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

项目结构:

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 项目的 settings.gradle 看起来像这样:

include ':Core'
project(':Core').projectDir = new File('../git_repo_of_project_Core/')

并将这些行添加到 build.gradle:

dependencies {
    compile project(':Core')
}

在“文件-> 无效缓存/重新启动”(解决 Android Studio 中的“无法解析符号”问题)和“构建-> 重建项目”(解决 ClassNotFoundException 问题)之后,它对我来说很好。

4

2 回答 2

2

一个好的指导方针是将版本化的东西一起构建。因此,如果您有三个 Git 存储库,您将拥有三个构建,它们将通过二进制存储库(例如 Artifactory 或 Nexus)交换工件。

如果您必须有一个跨多个 Git 存储库的构建,一些选项是使用 Git 子模块创建一个 uber 存储库,传递settings.gradlevia的位置--settings-file,或者从包含settings.gradle. 此外,您可能必须配置项目目录的位置,如在深度嵌套的目录树中定义子项目中所示。

于 2013-12-28T11:54:06.743 回答
1

将一个存储库的源包含到另一个存储库中意味着基础架构出现问题。正如@peter-niederwieser 提到的,在二进制工件(而不是源代码)级别重用代码是正常的。

通常你会在 git_repo_of_project_Core 上执行“gradle build install”,在 git_repo_of_project_A 和 git_repo_of_project_B 上执行“gradle build”。“构建”和“安装”任务的含义:

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

于 2013-12-28T18:04:33.913 回答