如何重用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