如何重用Gradle中的子模块?
How to reuse the submodule in Gradle?
我有两个以下Android工作室项目,结构如下:
projectA/
├----build.gradle
├----settings.gradle
├----bluewhale/
├----krill/
项目A settings.gradle 文件:include 'bluewhale', 'krill'
projectB/
├----build.gradle
├----settings.gradle
├----hello/
├----krill/
项目 B settings.gradle 文件:include 'hello', 'krill'
您可以看到 "projectA" 和 "projectB" 包含相同的模块 "krill"。实际上,这是一个图书馆项目。
我的问题是:如何重用Gradle中的子模块"krill"?我不想在每个项目
中包含 "krill" 的相同副本
期待您的回复!谢谢!
如果你有一个在多个项目中使用的子模块,你应该考虑将它提取到一个单独的项目中。然后您可以从中创建一个依赖项并将其包含在 dependencies
部分的两个项目中。
如果您只使用本地计算机进行开发,没有任何自定义存储库,最好的方法可能是使用 mavenLocal()
存储库。您可以使用 maven publish plugin 将您的 jar 发布到本地 maven 存储库。它应该像将它添加到新的 krill 一样简单:
apply plugin: 'maven'
apply plugin: 'maven-publish'
publishing {
publications {
maven(MavenPublication) {
from components.java
artifact sourceJar {
classifier "sources"
}
}
}
}
repositories {
mavenLocal()
}
您可能想要设置群组和工件 ID。有关详细信息,请参阅 the documentation。
你也可以将krill保留在其中一个项目中,比如说ProjectA,如果它与它有某种关系的话。然后在 krill 子模块中设置 maven 发布。也可以通过运行gradle :krill:publishToMavenLocal
发布到maven本地,然后在ProjectB中作为依赖使用。
另一种选择是将子模块保存在 projectA 和 projectB 树之外,然后使用如下方式添加它:
include("krill")
project(":krill") {
projectDir = new File("$settingsDir/../krill")
}
但我不推荐这个,因为它很老套而且你的 IDE 可能也有问题。
最后一件事可能是从您的 krill 项目所在的目录创建符号链接到 ProjectA 和 ProjectB。但这是一个非常糟糕的主意,例如当您使用版本控制时。
终于在这里找到了一篇文章:an-alternative-multiproject-setup-for-android-studio。它非常适合我!
它向我们展示了不同于Google的Gradle Plugin user guide recommends
的另一种方式
示例代码如下:(将此脚本添加到您的项目 settings.gradle
文件中)
include ':krill'
project(':krill').projectDir = new File('../otherProject/krill')
项目结构如下:
RootFolder/
├----projectA/
│ ├----build.gradle
│ ├----settings.gradle
│ └----bluewhale/
│
├----projectB/
│ ├----build.gradle
│ ├----settings.gradle
│ └----hello/
│
└----otherProject/
├----krill/
│ └----build.gradle
│
└----otherModule/
└----build.gradle
更多详情,请访问gradle官方文档:Multi Project Builds
我有两个以下Android工作室项目,结构如下:
projectA/
├----build.gradle
├----settings.gradle
├----bluewhale/
├----krill/
项目A settings.gradle 文件:include 'bluewhale', 'krill'
projectB/
├----build.gradle
├----settings.gradle
├----hello/
├----krill/
项目 B settings.gradle 文件:include 'hello', 'krill'
您可以看到 "projectA" 和 "projectB" 包含相同的模块 "krill"。实际上,这是一个图书馆项目。
我的问题是:如何重用Gradle中的子模块"krill"?我不想在每个项目
中包含 "krill" 的相同副本期待您的回复!谢谢!
如果你有一个在多个项目中使用的子模块,你应该考虑将它提取到一个单独的项目中。然后您可以从中创建一个依赖项并将其包含在 dependencies
部分的两个项目中。
如果您只使用本地计算机进行开发,没有任何自定义存储库,最好的方法可能是使用 mavenLocal()
存储库。您可以使用 maven publish plugin 将您的 jar 发布到本地 maven 存储库。它应该像将它添加到新的 krill 一样简单:
apply plugin: 'maven'
apply plugin: 'maven-publish'
publishing {
publications {
maven(MavenPublication) {
from components.java
artifact sourceJar {
classifier "sources"
}
}
}
}
repositories {
mavenLocal()
}
您可能想要设置群组和工件 ID。有关详细信息,请参阅 the documentation。
你也可以将krill保留在其中一个项目中,比如说ProjectA,如果它与它有某种关系的话。然后在 krill 子模块中设置 maven 发布。也可以通过运行gradle :krill:publishToMavenLocal
发布到maven本地,然后在ProjectB中作为依赖使用。
另一种选择是将子模块保存在 projectA 和 projectB 树之外,然后使用如下方式添加它:
include("krill")
project(":krill") {
projectDir = new File("$settingsDir/../krill")
}
但我不推荐这个,因为它很老套而且你的 IDE 可能也有问题。
最后一件事可能是从您的 krill 项目所在的目录创建符号链接到 ProjectA 和 ProjectB。但这是一个非常糟糕的主意,例如当您使用版本控制时。
终于在这里找到了一篇文章:an-alternative-multiproject-setup-for-android-studio。它非常适合我!
它向我们展示了不同于Google的Gradle Plugin user guide recommends
的另一种方式示例代码如下:(将此脚本添加到您的项目 settings.gradle
文件中)
include ':krill'
project(':krill').projectDir = new File('../otherProject/krill')
项目结构如下:
RootFolder/
├----projectA/
│ ├----build.gradle
│ ├----settings.gradle
│ └----bluewhale/
│
├----projectB/
│ ├----build.gradle
│ ├----settings.gradle
│ └----hello/
│
└----otherProject/
├----krill/
│ └----build.gradle
│
└----otherModule/
└----build.gradle
更多详情,请访问gradle官方文档:Multi Project Builds