如何正确地将 gradle 插件添加到多项目中?

Cat*_*ine 1 osgi gradle

我有一个多项目 build.gradle: https://gist.github.com/iva-nova-e-katerina/7c72399ede83b5f78dbae19582974f35

该脚本失败并出现错误:

> Plugin with id 'com.github.blindpirate.osgi' not found.
Run Code Online (Sandbox Code Playgroud)

为什么?也许 buildscript {} 应该在 allprojects 之外?如何正确地将 gradle 插件添加到多项目中?

小智 6

正如您所建议的,您可以通过buildscript移至allprojects. 例如

\n
buildscript {\n    repositories {\n        maven {\n            url "https://plugins.gradle.org/m2/"\n        }\n    }\n    dependencies {\n        classpath "gradle.plugin.com.github.blindpirate:gradle-legacy-osgi-plugin:0.0.4"\n    }\n}\n\nsubprojects {\n    apply plugin: "com.github.blindpirate.osgi"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

Gradle 文档解释了其工作原理:

\n
\n

对于多项目构建,使用 project\xe2\x80\x99s\nbuildscript() 方法声明的依赖项可用于其所有子项目的构建脚本。

\n
\n

当有人在官方论坛上提出类似问题时,Gradle 也推荐了这种方法。

\n

现在回答您的问题如何正确地将 gradle 插件添加到多项目中?。有一个更好的方法来应用gradle-legacy-osgi-plugin插件,即使用插件 DSL,例如

\n
plugins {\n  id "com.github.blindpirate.osgi" version "0.0.6"\n}\n
Run Code Online (Sandbox Code Playgroud)\n

与您当前使用的语法相比,使用插件 DSL 具有一些显着的优势,因此通常是推荐的方法。apply

\n

subprojects由于您正在使用多项目设置,因此插件 DSL 将与您当前使用的语法不兼容。我建议采用以下方法之一:

\n
    \n
  1. 在具有版本的根项目中应用插件,然后在没有版本的子项目中应用插件。用于apply false避免插件应用到根项目。该文档有一个完整的示例
  2. \n
\n
plugins {\n    id "com.github.blindpirate.osgi" version "0.0.6" apply false\n}\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 创建一个应用于每个子项目的约定插件
  2. \n
\n

不鼓励使用allprojectsandsubprojects语法,因为它将项目耦合在一起,从而导致并行构建执行等功能出现问题。使用上述建议可以帮助您避免这种旧语法。

\n