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

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

用法

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

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

Maven 发布插件

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

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

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

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

Ivy 发布插件

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

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

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

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

插件发布插件

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