gradle - 如何在 gradle 项目中配置依赖项,使其也可以作为子模块工作?
问题描述
我想在我的项目中使用一个项目作为 git 子模块,理想情况下不更改上游项目(或者如果它有意义,以一种将在那里合并的方式进行更改)。
问题是该项目由模块组成,其中 2 个我想直接使用,其中一个也取决于另一个。
myProject
├ submodule
| ├ first
| | ├ build.gradle: implementation project(":second") <---- this fails if I don't change it to :submodule:second
| ├ second
| ├ settings.gradle: include ':first', ':second'
├ app
| ├ build.gradle: implementation project(":submodule:first"), implementation project(":submodule:second")
| ├ settings.gradle: include ':submodule:first', ':submodule:second', ':app'
当我的项目settings.gradle
替换子模块settings.gradle
时,子模块的绝对路径突然改变了。我可以以某种方式将':子模块:秒作为:秒'吗?
我知道我可以相应地使用implementation project(somePrefix + ":second")
和定义它somePrefix
,但这将涉及触摸子模块。
解决方案
Gradle 项目路径(例如':submodule:second'
)
- 实际上代表项目层次结构。这意味着使用
include ':submodule:second'
in 您settings.gradle
将隐式创建一个名为 的项目submodule
,即使与构建根本不相关。 - 不需要匹配目录结构(这只是一个约定)。您可以设置独立于项目路径(和项目名称)的项目目录。
从文档中查看以下示例:
// include two projects, 'foo' and 'foo:bar'
// directories are inferred by replacing ':' with '/'
include 'foo:bar'
// include one project whose project dir does not match the logical project path
include 'baz'
project(':baz').projectDir = file('foo/baz')
但是,我建议根本不要使用include
。而是使用includeBuild
并设置复合构建。复合构建与经典的多项目构建的耦合不同。由于您的 Git 子模块指示可以用作独立项目(带有自己的settings.gradle
)的构建,多项目构建的强耦合似乎不合适。多个settings.gradle
文件也可能在多项目构建中导致问题,但对于复合构建来说很好。
推荐阅读
- function - 使用条件过滤元组列表以输出列表
- mysql - 连续手动更新主键会导致后续插入失败/键的重复条目
- sql-server - 更改现有实体框架连接的应用程序名称?
- c# - 使用反射 c# 获取 JsonProperty 属性的名称
- swift - 使用 SnapKit 长宽比和更小的尺寸
- go - 如何通过端到端的微服务链跟踪请求?
- android - 在 reactNative 中运行模拟器和 gradle 的问题
- keycloak - 是否可以让多个 Keycloak 领域连接到同一个 icCube 服务器?
- python - 将多个 ImageDataGenerator 的输出合并到一个张量
- arduino - Arduino LED Matrix 从串口接收数据非常慢