如何从自定义 gradle 插件的仓库应用插件

问题描述 投票:0回答:1

我阅读了这个答案,但据我了解,它不适用于较新版本的 Gradle。

前提条件:

  • 摇篮8.4
  • 自定义插件

我用 build.gradle 创建了插件

buildscript {
    dependencies {
        classpath 'ru.vyarus:gradle-quality-plugin:4.9.0' // it's just a try to provide dependency throught plugin
    }
}

plugins {
    id 'java-gradle-plugin'
    id 'groovy'
    id 'maven-publish'
}

repositories {
    mavenLocal()
    mavenCentral()
    gradlePluginPortal()
}

gradlePlugin {
    plugins {
        create('base-configurer-plugin') {
            id = 'com.test.gradle.base-configurer-plugin'
            implementationClass = 'com.test.BaseGradlePlugin'
        }
    }
}

dependencies {
    compileOnly 'ru.vyarus:gradle-quality-plugin:4.9.0' // added for possibility to import in custom plugin code
}

以及插件代码

@Override
void apply(Project project) {
    project.dependencies {
        implementation 'ru.vyarus:gradle-quality-plugin:4.9.0'
    }
    project.pluginManager.apply(QualityPlugin) // I tried many ways to apply with manipulating this apply() method
}

但是当我尝试从其他项目应用此插件时出现错误:

Unable to load class 'ru.vyarus.gradle.plugin.quality.QualityPlugin'
ru.vyarus.gradle.plugin.quality.QualityPlugin

我还尝试通过runtimeClasspath添加依赖项,但遇到了另一个错误:

> Dependencies can not be declared against the `runtimeClasspath` configuration.

runtime() 也不起作用

Gradle DSL method not found: 'runtime()'

所以我的问题是:

如何从自定义 Gradle 插件中添加插件及其依赖项?

非常感谢您的宝贵时间

gradle groovy gradle-plugin
1个回答
0
投票

要从您自己的自定义插件应用外部插件,您需要:

  1. 外部插件的代码位于自定义插件的类路径上,并且
  2. 告诉 Gradle 通过调用 Gradle
    Project
    对象可用的几种方法之一来应用外部插件。

1.将外部插件的代码放在类路径上

在这里,您需要找到外部插件 JAR 的 Maven 坐标,并将它们添加到插件项目的

build.gradle
文件中,就像任何其他 Gradle 项目的任何其他依赖项一样。

这里你应该写:

dependencies {
    implementation 'ru.vyarus:gradle-quality-plugin:4.9.0'
}

您使用

implementation
配置,而不是
compileOnly
,因为您在运行时需要类路径上的代码。

Gradle 将在您在

repositories
块中指定的存储库中查找此依赖项。我看到这个工件在 Maven CentralGradle Plugin Portal 上都可用,因此使用任一存储库都应该足够了(您已指定两者)1

此外,代码不需要位于插件项目的构建脚本的类路径上(因此没有构建脚本块)或自定义插件将应用到的项目的类路径(因此在您的代码中不要使用

project.dependencies
)自定义插件)。

2.告诉 Gradle 应用外部插件

一旦外部插件的代码可供自定义插件使用,您就可以告诉 Gradle 将其应用到您的自定义插件代码中(即在您自己的

apply
方法中)。推荐的方法是使用
PluginManager
对象上的方法之一。

编写 Groovy 代码,可以是:

project.pluginManager.apply('ru.vyarus.quality')

或者:

// with import ru.vyarus.gradle.plugin.quality.QualityPlugin

project.pluginManager.apply(QualityPlugin::class)

1任何此类存储库也必须可用于您选择应用自定义插件的任何项目的

plugins
块。但是,由于自定义插件可在 Gradle 插件门户中使用,并且默认情况下 Gradle 插件门户可作为
plugins
块的存储库,因此这应该不是问题。

© www.soinside.com 2019 - 2024. All rights reserved.