【问题标题】:How to setup a project with multiple levels of modules for local development如何设置具有多级模块的项目以进行本地开发
【发布时间】:2019-05-22 08:16:05
【问题描述】:

我有多个大致这种布局的应用项目:

  • 示例应用程序 (Java)
    • 具有附加功能的 Java 包装器
      • C++ + 浅层 Java 包装器
  • 第二个示例应用程序(颤振)
    • 颤振包装器
      • 具有附加功能的 Java 包装器
        • C++ + 浅层 Java 包装器
  • 第三个示例应用程序
    • 颤振包装器
      • 具有附加功能的 Java 包装器
        • C++ + 浅层 Java 包装器

所有应用程序共享相同的主要依赖项(具有附加功能的 java Wrapper)及其依赖项树。现在我正在开发每个应用程序,一直到 C++ 代码。它们在各自的父项目中作为 git 子模块进行管理。

由于整个过程的变化率很高,我希望构建最后一个示例,以便从所有来源进行测试。

我尝试了几种方法将其整合到一个 gradle 构建中:

1。首选(但失败)解决方案:每个项目中的settings.gradle,每个项目只包含直接依赖项

现在我希望在一个 Flutter 构建中管理这棵完整的树。所以我在每个项目的settings.gradle中添加了直接依赖,只是为了了解gradle only supports one toplevel settings.gradle。所以这不起作用。上述问题中提出的解决方案主要尝试模拟对多个 settings.gradle 文件的支持。

2。 Functioning but Ugly: 添加所有依赖项目都包含在顶层settings.gradle中

当每个子项目都完全了解其依赖关系时,我真的必须手动将所有子项目包含在顶层settings.gradle 中吗?此外,由于有多个项目依赖于此,我是否必须为每个项目手动执行此操作?

(甚至不要让我开始关于 gradle 不告诉我,我有一个错误的 projectDir,因为我在递归下降的第 100 级有错字!)

3。可能可行的解决方案:使用复合构建

这将触发构建,但现在我必须解决构建工件而不是项目。其他工件也有同样的问题。

4。可能可行的解决方案:将依赖项项目发布到 maven(或其他)存储库并将其拉入应用程序

我没有尝试这个,因为我觉得这个想法令人厌恶:我想测试 C++ 代码中的一个小改动,现在必须将它推送到存储库,并且可能对上面的每个项目都做同样的事情? 这适用于稳定的项目,但不适用于灵活的探索性开发。当然,我想在最后发布一些东西,但我不想发布中间的每一步。


这让我想知道:我在做一些不寻常的事情吗?我的意思是:没有人有 gradle 似乎无法满足的相同要求:

  1. 实时更新一直到快速测试本地更改
  2. 顶层不重复传递依赖

这种情况下的常见做法是什么?

【问题讨论】:

  • 不重复传递依赖 我猜你说的是settings.gradle 文件中的include 语句,但请注意,你不是这样定义依赖的,但构建内部的项目。此时没有层次结构,因此没有依赖关系。如果您的项目在层次结构的每个级别上都非常分离,请使用复合构建。否则,请考虑更扁平的项目层次结构。
  • @LukasKörfer 我不确定它们是否会被视为强解耦。正如我所描述的,我想迭代地共同开发子项目,而不会在两者之间有一个大的发布循环。在我看来,复合构建会产生本地可用的 .aar 文件,我必须再次在顶级项目中找到这些文件,所以我没有赢得任何东西。 you do not define dependencies this way:我是 gradle 新手。我只想说:每个项目都需要来自子项目的东西。因此,它们对我来说看起来像是依赖项,不是吗?

标签: java android gradle android-gradle-plugin


【解决方案1】:

在Lukas Körfer's comment 之后,我再次仔细研究了复合构建,发现我对它们有误解。我不明白他们的依赖解析会为我解决构建工件的查找问题。

现在我使用复合构建将整个构建结合在一起,同时使用

implementation 'my.group:project'

导入子项目的代码和

includeBuild '../path/to/subproject/'

把他们拉进来。

【讨论】:

    猜你喜欢
    • 2011-06-02
    • 1970-01-01
    • 2020-08-15
    • 2013-04-26
    • 2010-11-15
    • 2019-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多