如何为本地开发设置具有多级模块的项目
How to setup a project with multiple levels of modules for local development
我有多个大致这样布局的应用程序项目:
- 示例应用程序 (Java)
- Java 具有附加功能的包装器
- C++ + 浅层 Java 包装器
- 第二个示例应用程序 (flutter)
- 颤振包装器
- Java 具有附加功能的包装器
- C++ + 浅层 Java 包装器
- 第三个示例应用程序
- 颤振包装器
- Java 具有附加功能的包装器
- C++ + 浅层 Java 包装器
所有应用程序共享相同的主要依赖项(java 具有附加功能的包装器)及其依赖项树。现在我正在开发每个应用程序,一直到 C++ 代码。它们在各自的父项目中作为 git 个子模块进行管理。
由于整个过程的变化率很高,我希望构建最终示例以测试所有来源。
我尝试了几种方法将其整合为一个 gradle 构建:
1。首选(但失败)解决方案:settings.gradle 在每个项目中,每个项目只包含直接依赖项
现在我希望在一个 flutter 构建中管理这棵完整的树。所以我在每个项目中添加了直接依赖项settings.gradle,只是为了学习gradle only supports one toplevel settings.gradle
。所以这是行不通的。上述问题中提出的解决方案主要尝试模拟对多个 settings.gradle 文件的支持。
2。功能正常但丑陋:添加所有依赖项项目都包含在顶层 settings.gradle
当每个子项目都非常了解其依赖关系时,我真的必须在顶层 settings.gradle
中手动包含所有子项目吗?此外,由于有多个项目依赖于此,我是否必须为每个项目手动执行此操作?
(甚至不让我开始 gradle 没有告诉我,我有一个错误的 projectDir,因为我在递归下降的第 100 层有一个错字!)
3。可能有效的解决方案:使用复合构建
这将触发构建,但现在我必须解析构建工件而不是项目。其他工件也有同样的问题。
4。可能有效的解决方案:将依赖项项目发布到 Maven(或其他)存储库并将其拉入应用程序
我没有尝试这个,因为我觉得这个想法很可恶:我想测试 C++ 代码中的一个小改动,现在必须将其推送到存储库,并且可能对上面的每个项目都执行相同的操作?
这适用于稳定的项目,但不适用于灵活的探索性开发。当然,我想在最后发布一些内容,但我不想发布中间的每一小步。
这让我想知道:我是不是在做一些不寻常的事情?我的意思是:有没有人的要求与 gradle 似乎无法满足的要求相同:
- 从一直到快速测试本地更改的实时更新
- 没有重复顶层的传递依赖
这种情况下的常见做法是什么?
在 之后,我再次仔细研究了复合构建,发现我对它们有误解。我不明白他们的依赖关系解析会为我解决构建工件的发现。
现在我使用复合构建将整个构建结合在一起,同时使用
implementation 'my.group:project'
导入子项目的代码和
includeBuild '../path/to/subproject/'
把他们拉进来。
我有多个大致这样布局的应用程序项目:
- 示例应用程序 (Java)
- Java 具有附加功能的包装器
- C++ + 浅层 Java 包装器
- Java 具有附加功能的包装器
- 第二个示例应用程序 (flutter)
- 颤振包装器
- Java 具有附加功能的包装器
- C++ + 浅层 Java 包装器
- Java 具有附加功能的包装器
- 颤振包装器
- 第三个示例应用程序
- 颤振包装器
- Java 具有附加功能的包装器
- C++ + 浅层 Java 包装器
- Java 具有附加功能的包装器
- 颤振包装器
所有应用程序共享相同的主要依赖项(java 具有附加功能的包装器)及其依赖项树。现在我正在开发每个应用程序,一直到 C++ 代码。它们在各自的父项目中作为 git 个子模块进行管理。
由于整个过程的变化率很高,我希望构建最终示例以测试所有来源。
我尝试了几种方法将其整合为一个 gradle 构建:
1。首选(但失败)解决方案:settings.gradle 在每个项目中,每个项目只包含直接依赖项
现在我希望在一个 flutter 构建中管理这棵完整的树。所以我在每个项目中添加了直接依赖项settings.gradle,只是为了学习gradle only supports one toplevel settings.gradle
。所以这是行不通的。上述问题中提出的解决方案主要尝试模拟对多个 settings.gradle 文件的支持。
2。功能正常但丑陋:添加所有依赖项项目都包含在顶层 settings.gradle
当每个子项目都非常了解其依赖关系时,我真的必须在顶层 settings.gradle
中手动包含所有子项目吗?此外,由于有多个项目依赖于此,我是否必须为每个项目手动执行此操作?
(甚至不让我开始 gradle 没有告诉我,我有一个错误的 projectDir,因为我在递归下降的第 100 层有一个错字!)
3。可能有效的解决方案:使用复合构建
这将触发构建,但现在我必须解析构建工件而不是项目。其他工件也有同样的问题。
4。可能有效的解决方案:将依赖项项目发布到 Maven(或其他)存储库并将其拉入应用程序
我没有尝试这个,因为我觉得这个想法很可恶:我想测试 C++ 代码中的一个小改动,现在必须将其推送到存储库,并且可能对上面的每个项目都执行相同的操作? 这适用于稳定的项目,但不适用于灵活的探索性开发。当然,我想在最后发布一些内容,但我不想发布中间的每一小步。
这让我想知道:我是不是在做一些不寻常的事情?我的意思是:有没有人的要求与 gradle 似乎无法满足的要求相同:
- 从一直到快速测试本地更改的实时更新
- 没有重复顶层的传递依赖
这种情况下的常见做法是什么?
在
现在我使用复合构建将整个构建结合在一起,同时使用
implementation 'my.group:project'
导入子项目的代码和
includeBuild '../path/to/subproject/'
把他们拉进来。