将多模块Gradle库打包到单个模块中

时间:2018-12-19 09:18:48

标签: gradle kotlin multi-module

我将用Kotlin编写的pancakes基于Gradle的库分为多个模块:pancakes-corepancakes-addon1,...,pancakes-addonNaddon个包括core一个。

现在,大多数用户都不在乎,只需要包含所有依赖项的默认配置即可。但是他们将不得不编写样板:

dependencies {
    implementation("pancakes:pancakes-core")
    implementation("pancakes:pancakes-addon1")
    ...
    implementation("pancakes:pancakes-addonN")
}

对我来说这是不行的。尽管我花了一些时间将一些可替换的功能分支到自己的模块中,但我可能不得不合并所有模块。

除非!有一种方法可以编写如下内容:

project(":pancakes-simple") {
    dependencies {
        autoForwardedApi(":pancakes-core")
        autoForwardedApi(":pancakes-addon1")
        ...
        autoForwardedApi(":pancakes-addonN")
    }
}

不幸的是,api还不够。

2 个答案:

答案 0 :(得分:1)

是的,它可能并且接近您的预期外观。

添加一个单独的子项目,例如:pancakes-simple,并像对常规模块一样配置其发布。

然后仅添加您要公开的依赖项。如果您没有使用java-library插件,请使用compile配置:

project(":pancakes-simple") {
    dependencies {
        compile(":pancakes-core")
        compile(":pancakes-addon1")
        ...
        compile(":pancakes-addonN")
    }
}

implementation依赖项不同,如果它们对pancakes-simple模块添加了依赖项,则这些依赖项将在使用者的编译类路径上可用。

使用java-library插件,api依赖项也应该起作用

答案 1 :(得分:0)

java-library Gradle插件是从当前模块转发api依赖项所必需的。这就是将所有模块打包到一个模块中的方法:

  1. 在库的所有模块中添加java-library插件(并删除java
  2. 创建一个像我的:pancakes-simple一样依赖于所有其他模块的模块