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 发布 (maven-publish)Ivy 发布 (ivy-publish) 插件。

其他插件会自动应用 Java Gradle 插件,例如 插件发布插件

Maven 发布插件

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

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

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

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

Ivy 发布插件

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

  • 一个名为 pluginIvy 的“主”出版物,基于 主 Java 组件

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

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

插件发布插件

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