Java Gradle 插件开发插件可以用于辅助 Gradle 插件的开发。它自动应用了 Java Library (java-library
) 插件,添加了 gradleApi()
依赖到 api
配置,并在 jar
Task 执行期间执行插件元数据验证。
该插件还与 TestKit 集成,TestKit 是一个库,用于辅助编写和执行插件代码的功能测试。如果找到插件,它会自动将 gradleTestKit()
依赖项添加到 testImplementation
配置,并生成 GradleRunner
实例使用的插件类路径清单文件。有关其用法、配置选项和示例的更多信息,请参阅 使用插件开发插件自动注入类路径。
用法
要使用 Java Gradle 插件开发插件,请在您的构建脚本中包含以下内容
plugins {
`java-gradle-plugin`
}
plugins {
id 'java-gradle-plugin'
}
应用此插件会自动应用 Java Library(java-library
) 插件,并将 gradleApi()
依赖项添加到 api
配置。它还会向构建添加一些验证。
执行以下验证
-
插件存在已定义的插件描述符。
-
插件描述符包含
implementation-class
属性。 -
implementation-class
属性引用 jar 中的有效类文件。 -
每个属性 getter 或相应的字段都必须使用属性注解进行注解,例如
@InputFile
和@OutputDirectory
。不参与最新检查的属性应使用@Internal
进行注解。
任何失败的验证都将导致警告消息。
对于您正在开发的每个插件,向 gradlePlugin {}
脚本块添加一个条目
gradlePlugin {
plugins {
create("simplePlugin") {
id = "org.gradle.sample.simple-plugin"
implementationClass = "org.gradle.sample.SimplePlugin"
}
}
}
gradlePlugin {
plugins {
simplePlugin {
id = 'org.gradle.sample.simple-plugin'
implementationClass = 'org.gradle.sample.SimplePlugin'
}
}
}
gradlePlugin {}
块定义了项目正在构建的插件,包括插件的 id
和 implementationClass
。根据关于正在开发的插件的这些数据,Gradle 可以自动执行以下操作
-
在
jar
文件的META-INF
目录中生成插件描述符。 -
为每个插件配置 插件标记产物 发布(Maven 或 Ivy)。
-
将每个插件发布到 Gradle 插件门户(有关详细信息,请参阅 将插件发布到 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
)。