Java Gradle 插件开发插件可用于协助开发 Gradle 插件。它会自动应用 Java Library (java-library) 插件,将 gradleApi() 依赖项添加到 api 配置中,并在执行 jar Task 期间执行插件元数据验证。

该插件还集成了 TestKit,这是一个有助于编写和执行插件代码功能测试的库。它会自动将 gradleTestKit() 依赖项添加到 testImplementation 配置中,如果找到 GradleRunner 实例,则会生成供其使用的插件 classpath 清单文件。有关其用法、配置选项和示例的更多信息,请参阅使用插件开发插件进行自动 classpath 注入

用法

要使用 Java Gradle 插件开发插件,请在您的构建脚本中包含以下内容

build.gradle.kts
plugins {
    `java-gradle-plugin`
}
build.gradle
plugins {
    id 'java-gradle-plugin'
}

应用此插件会自动应用 Java Library(java-library) 插件,并将 gradleApi() 依赖项添加到 api 配置中。它还为构建添加了一些验证。

执行以下验证

  • 为插件定义了插件描述符。

  • 插件描述符包含一个 implementation-class 属性。

  • implementation-class 属性引用了 jar 中有效的类文件。

  • 每个属性 getter 或相应的字段都必须使用属性注解进行标注,例如 @InputFile@OutputDirectory。不参与最新检查的属性应使用 @Internal 进行标注。

任何验证失败都将导致警告消息。

对于您开发的每个插件,请将一个条目添加到 gradlePlugin {} 脚本块中

build.gradle.kts
gradlePlugin {
    plugins {
        create("simplePlugin") {
            id = "org.gradle.sample.simple-plugin"
            implementationClass = "org.gradle.sample.SimplePlugin"
        }
    }
}
build.gradle
gradlePlugin {
    plugins {
        simplePlugin {
            id = 'org.gradle.sample.simple-plugin'
            implementationClass = 'org.gradle.sample.SimplePlugin'
        }
    }
}

gradlePlugin {} 块定义了项目正在构建的插件,包括插件的 idimplementationClass。根据这些有关正在开发的插件的数据,Gradle 可以自动

交互

插件的某些行为取决于您的构建中是否也应用了其他相关插件,即 Maven Publish (maven-publish)Ivy Publish (ivy-publish) 插件。

其他插件会自动应用 Java Gradle 插件,例如 Plugin Publishing Plugin

Maven Publish 插件

当 Java Gradle 插件 (java-gradle-plugin) 检测到构建中也应用了 Maven Publish 插件 (maven-publish) 时,它将自动配置以下 MavenPublications

  • 一个名为 pluginMaven 的“主”发布,基于主 Java 组件

  • 多个“标记”发布gradlePlugin {} 块中定义的每个插件对应一个),命名为 <pluginName>PluginMarkerMaven(例如,在上面的示例中它将是 simplePluginPluginMarkerMaven

这种自动配置发生在 Project.afterEvaluate() 块中(即在构建配置阶段的末尾),并且仅在这些发布尚未定义的情况下进行,因此可以在构建配置的早期阶段创建和定制它们。

Ivy Publish 插件

当 Java Gradle 插件 (java-gradle-plugin) 检测到构建中也应用了 Ivy Publish 插件 (ivy-publish) 时,它将自动配置以下 IvyPublications

  • 一个名为 pluginIvy 的“主”发布,基于主 Java 组件

  • 多个“标记”发布gradlePlugin {} 块中定义的每个插件对应一个),命名为 <pluginName>PluginMarkerIvy(例如,在上面的示例中它将是 simplePluginPluginMarkerIvy

这种自动配置发生在 Project.afterEvaluate() 块中(即在构建配置阶段的末尾),并且仅在这些发布尚未定义的情况下进行,因此可以在构建配置的早期阶段创建和定制它们。

Plugin Publish 插件

版本 1.0.0 开始,Plugin Publish 插件始终自动应用 Java Gradle 插件 (java-gradle-plugin) 和 Maven Publish 插件 (maven-publish)。