如何设置具有多个模块级别的项目以进行本地开发

时间:2019-05-22 08:16:05

标签: java android gradle android-gradle

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

  • 示例应用程序(Java)
    • 具有其他功能的Java包装器
      • C ++ +浅Java包装器
  • 第二个示例应用程序(颤振)
    • 绒纸包装
      • 具有其他功能的Java包装器
        • C ++ +浅Java包装器
  • 第三个示例应用
    • 绒纸包装
      • 具有其他功能的Java包装器
        • C ++ +浅Java包装器

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

由于在整个过程中变化率很高,所以我希望为所有来源的测试构建最终示例。

我尝试了几种方法将它们捆绑到一个gradle版本中:

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

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

2。起作用但很丑:添加所有依赖项项目都包含在顶层设置中。gradle

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

(而且甚至不让我为gradle不告诉我而烦恼,我有一个错误的projectDir,因为我在第100级递归下降中遇到了错字!)

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

这将触发构建,但是现在我必须解决构建工件而不是项目。其他工件也是如此。

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

我没有尝试此操作,因为我发现这个想法令人讨厌:我想测试C ++代码中的一个小更改,现在必须将其推送到存储库中,并可能对上述每个项目都做同样的事情? 这适用于稳定的项目,但不适用于灵活的探索性开发。当然,我想在最后发布一些内容,但是我不想发布这之间的每一个小步骤。


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

  1. 从头到尾实时更新,以快速测试本地更改
  2. 在顶层不重复传递依赖

在这种情况下,通常的做法是什么?

1 个答案:

答案 0 :(得分:0)

Lukas Körfer's comment之后,我再次仔细查看了复合构建,并发现我对它们有误解。我不知道他们的依赖关系解决方案将为我解决构建工件的发现。

现在我在使用时使用复合构建将整个构建捆绑在一起

DEVELOPER

导入子项目的代码和

implementation 'my.group:project'

将它们拉入。