【发布时间】:2019-02-10 20:26:41
【问题描述】:
从 Gradle 4.6 开始:
- https://docs.gradle.org/4.6/userguide/java_library_plugin.html#sec:java_library_separation
- https://docs.gradle.org/4.6/release-notes.html#compile/runtime-scope-separation-in-pom-consumption
添加了新配置:api(仅在java-library 插件中)和implementation(由两者定义)。
在多模块项目中,我有几个“核心”模块充当内部库,有时需要通过 api 配置传递暴露的编译时依赖项。
之前我们递归应用java插件:
subprojects {
apply plugin: 'java'
}
为了纯粹,我们可以将java-library 插件应用于“库”模块,将java 插件应用于“最终应用”模块。
如果我们只是把:
subprojects {
apply plugin: 'java'
apply plugin: 'java-library'
}
注意使用正确的命名架构(我们没有)可以有选择地进行:
subprojects {
if (project.name.startsWith('lib-')) {
apply plugin: 'java-library'
} else {
apply plugin: 'java'
}
}
【问题讨论】:
-
嗨。目前还不清楚这里的问题/问题是什么:根据项目名称有选择地应用插件的方法应该有效。你测试了吗? (注意
java-library插件扩展了java plugin:因此您在应用java-library时不需要显式应用java插件) -
明确一点:同时应用这两个插件有什么困难?选择性申请不方便。
-
理想情况下,正如您所说,您应该将
java-library插件仅应用于“库”模块而不是“最终应用程序”模块;但由于java-library扩展了java插件,您也可以将此插件应用于“最终应用程序”。在这些“应用程序”模块中,您不会使用api配置,而是使用implementation。 -
这样您就可以简单地将
java-library插件应用于您的所有子项目subprojects { apply plugin: 'java-library' } -
@M.Ricciuti 你能添加答案以便我接受吗?
标签: gradle