如何重用Gradle中的子模块?

时间:2015-08-10 02:43:28

标签: android android-studio gradle android-gradle

我有两个以下Android Studio项目,结构如下:

projectA/
    ├----build.gradle
    ├----settings.gradle
    ├----bluewhale/
    ├----krill/

projectA settings.gradle文件:include 'bluewhale', 'krill'

projectB/
    ├----build.gradle
    ├----settings.gradle
    ├----hello/
    ├----krill/

projectB settings.gradle文件:include 'hello', 'krill'

您可以看到“projectA”和“projectB”包含相同的模块“krill”。实际上,这是一个图书馆项目。

我的问题是:如何在Gradle中重用子模块“krill”?我不想在每个项目中包含相同的“磷虾”副本

期待您的回复!谢谢!

2 个答案:

答案 0 :(得分:0)

如果您有一个在多个项目中使用的子模块,您应该考虑将其提取到单独的项目中。然后,您可以从中创建一个依赖项,并将其包含在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 local,然后将其用作ProjectB中的依赖项。

另一种选择是将子模块保存在projectA和projectB树之外,并使用以下内容添加它:

include("krill")
  project(":krill") {
    projectDir = new File("$settingsDir/../krill")
}

但是我不能推荐这个,因为它很hacky,你的IDE也可能有问题。

最后可能的做法是从 krill 项目所在的目录创建符号链接到ProjectA和ProjectB。但这是一个非常糟糕的想法,例如当您使用版本控制时。

答案 1 :(得分:0)

最后我在这里找到了一篇文章: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