如何在 gradle 项目中配置依赖项,使其也可以作为子模块使用?
How do I configure a dependency in a gradle project such that it also works as a submodule?
我想在我的项目中使用一个项目作为 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
时,子模块的绝对路径突然改变。我能以某种方式`include ':submodule:second as :second'吗?
我知道我可以使用 implementation project(somePrefix + ":second")
并相应地定义这个 somePrefix
但这会涉及到子模块。
Gradle 项目路径(例如 ':submodule:second'
)
- 实际上代表项目层次结构。这意味着在
settings.gradle
中使用 include ':submodule:second'
将隐式创建一个名为 submodule
的项目,即使与构建完全无关。
- 不需要匹配目录结构(这只是一个约定)。您可以将项目目录设置为独立于项目路径(和项目名称)。
查看 the documentation 中的以下示例:
// 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
并设置 composite build。复合构建与经典 multi-project 构建的不同之处在于它们的耦合。由于您的 Git 子模块指示构建可以用作独立项目(具有自己的 settings.gradle
),因此 multi-project 构建的强耦合似乎不合适。多个 settings.gradle
文件也可能会导致 multi-project 构建出现问题,但对于复合构建没有问题。
我想在我的项目中使用一个项目作为 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
时,子模块的绝对路径突然改变。我能以某种方式`include ':submodule:second as :second'吗?
我知道我可以使用 implementation project(somePrefix + ":second")
并相应地定义这个 somePrefix
但这会涉及到子模块。
Gradle 项目路径(例如 ':submodule:second'
)
- 实际上代表项目层次结构。这意味着在
settings.gradle
中使用include ':submodule:second'
将隐式创建一个名为submodule
的项目,即使与构建完全无关。 - 不需要匹配目录结构(这只是一个约定)。您可以将项目目录设置为独立于项目路径(和项目名称)。
查看 the documentation 中的以下示例:
// 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
并设置 composite build。复合构建与经典 multi-project 构建的不同之处在于它们的耦合。由于您的 Git 子模块指示构建可以用作独立项目(具有自己的 settings.gradle
),因此 multi-project 构建的强耦合似乎不合适。多个 settings.gradle
文件也可能会导致 multi-project 构建出现问题,但对于复合构建没有问题。