【问题标题】:Gradle >=4.6: using java-library & java plugins simultaneously in multi-module buildGradle >=4.6:在多模块构建中同时使用 java-library 和 java 插件
【发布时间】:2019-02-10 20:26:41
【问题描述】:

从 Gradle 4.6 开始:

添加了新配置: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


【解决方案1】:

java-library 插件“扩展”了基础java 插件,因此您可以简单地将java-library 插件应用到您的所有子项目中,这将自动应用java 插件。

正如您所提到的,理想/纯粹的方式是仅将java-library 插件应用于“库”项目,但您仍然可以将此插件应用于“最终应用程序”模块,这将起作用(当然在此类模块中)您将使用implementation 配置而不是api,因为它没有意义)。

另一种方法是直接在子项目构建脚本中应用所需的插件,而不是从根项目构建全局应用;在这种情况下,您不需要定义“命名模式”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多