【问题标题】:How to properly add gradle plugin to multiproject?如何正确地将 gradle 插件添加到多项目?
【发布时间】:2021-11-14 13:13:04
【问题描述】:

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

此脚本失败并出现错误:

> Plugin with id 'com.github.blindpirate.osgi' not found.

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

【问题讨论】:

    标签: gradle osgi


    【解决方案1】:

    按照您的建议,您可以通过将buildscript 移出allprojects 来解决此问题。例如

    buildscript {
        repositories {
            maven {
                url "https://plugins.gradle.org/m2/"
            }
        }
        dependencies {
            classpath "gradle.plugin.com.github.blindpirate:gradle-legacy-osgi-plugin:0.0.4"
        }
    }
    
    subprojects {
        apply plugin: "com.github.blindpirate.osgi"
    }
    

    Gradle docs 解释了这个工作的原因:

    对于多项目构建,使用项目的 buildscript() 方法可用于其所有的构建脚本 子项目。

    当有人在官方论坛上问similar question 时,Gradle 也推荐了这种方法。

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

    plugins {
      id "com.github.blindpirate.osgi" version "0.0.6"
    }
    

    使用插件 DSL 比您当前使用的 apply 语法有一些 significant advantages,因此通常是推荐的方法。

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

    1. 在有版本的根项目中应用插件,然后在没有版本的子项目中应用插件。使用apply false 避免插件被应用到根项目。 docs 有一个完整的例子。
    plugins {
        id "com.github.blindpirate.osgi" version "0.0.6" apply false
    }
    
    1. 创建一个convention plugin,将其应用于每个子项目

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

    【讨论】:

    • 我使用了传统方式,gradle 说:"> 未找到 ID 为 'osgi' 的插件。"是否意味着插件找到并应用,但不兼容?
    • 哪种是传统方式?我在上面概述了一些选项,所以不确定你指的是哪一个。
    • buildscript { ....
    • 你可以用上面的 sn-p 替换你的整个构建脚本,看看它是否有效。我建议从那里向后工作。
    • 相同 - "> 未找到 ID 为 'osgi' 的插件。"我不确定我使用了正确的插件
    【解决方案2】:

    似乎应该在每个子项目的 build.grade 中应用插件,而不是在根的“subprojects {”元素中。和这里一样

    git clone github.com/bobbylight/RSyntaxTextArea.git
    

    (插件:“biz.aQute.bnd.builder”)

    【讨论】:

    • subprojects {} 块中应用插件可以很好地使用apply plugin: '...' 语法。 plugins { id '...' } 语法在这些语法中不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 2016-06-07
    • 2021-01-29
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多