将多模块 Gradle 库打包成单个模块
Pack a multi-module Gradle library into a single module
我将用 Kotlin 编写的基于 pancakes
Gradle 的库拆分为多个模块:pancakes-core
、pancakes-addon1
、...、pancakes-addonN
. addon
个包括 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
还不够。
是的,这是可能的,并且接近您想象的样子。
添加一个单独的子项目,例如 :pancakes-simple
并像您对普通模块所做的那样配置其发布。
然后只需添加您希望它公开的依赖项。如果你没有使用java-library
插件,使用compile
配置:
project(":pancakes-simple") {
dependencies {
compile(":pancakes-core")
compile(":pancakes-addon1")
...
compile(":pancakes-addonN")
}
}
与 implementation
依赖项不同,如果它们添加对 pancakes-simple
模块的依赖项,这些将在消费者的编译类路径中可用。
使用 java-library
插件,api
依赖项也应该可以工作
java-library
Gradle 插件是 api
从当前模块转发依赖项所必需的。这就是将所有模块打包成一个模块的方法:
- 在库的所有模块中添加
java-library
插件(并删除 java
)
- 像我的
:pancakes-simple
创建一个 api
依赖于所有其他模块的模块
我将用 Kotlin 编写的基于 pancakes
Gradle 的库拆分为多个模块:pancakes-core
、pancakes-addon1
、...、pancakes-addonN
. addon
个包括 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
还不够。
是的,这是可能的,并且接近您想象的样子。
添加一个单独的子项目,例如 :pancakes-simple
并像您对普通模块所做的那样配置其发布。
然后只需添加您希望它公开的依赖项。如果你没有使用java-library
插件,使用compile
配置:
project(":pancakes-simple") {
dependencies {
compile(":pancakes-core")
compile(":pancakes-addon1")
...
compile(":pancakes-addonN")
}
}
与 implementation
依赖项不同,如果它们添加对 pancakes-simple
模块的依赖项,这些将在消费者的编译类路径中可用。
使用 java-library
插件,api
依赖项也应该可以工作
java-library
Gradle 插件是 api
从当前模块转发依赖项所必需的。这就是将所有模块打包成一个模块的方法:
- 在库的所有模块中添加
java-library
插件(并删除java
) - 像我的
:pancakes-simple
创建一个api
依赖于所有其他模块的模块