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

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

用法

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

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

应用此插件会自动应用 Java 库 (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 插件,例如 插件发布插件

Maven Publish 插件

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

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

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

此自动配置发生在 Project.afterEvaluate() 块中(因此在 构建配置阶段 结束时),并且仅当这些发布尚未定义时才发生,因此可以在构建配置的早期阶段创建和自定义它们。

Ivy Publish 插件

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

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

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

此自动配置发生在 Project.afterEvaluate() 块中(因此在 构建配置阶段 结束时),并且仅当这些发布尚未定义时才发生,因此可以在构建配置的早期阶段创建和自定义它们。

插件发布插件

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