Gradle 插件开发:解决工具工件的惯用方法
Gradle Plugin Development: Idiomatic way of resolving tool artefacts
开发 Gradle 插件的完全新手。
我正在为定制的人工制品打包工具开发插件。该工具在 Maven 存储库中作为一个 fat jar 可用。有不止一种类型的工具可以完成这项工作,因此插件需要确定它需要哪一种,并向任务图中添加一个解决步骤。
我想我需要:
- 为插件创建配置(“pluginXTools”)
- 找出我需要的工件并将其添加到
DependencyResolutionListener::beforeResolve
- 在我的插件打包任务中添加对解析步骤的依赖。
如何将人工制品分辨率连接到我的任务,使其成为构建图的一部分?有人可以向我展示我想要实现的目标的框架
我在 Gradle slack 中询问并查看了一些现有插件。 Gradle 中解决工具依赖关系的约定是使用插件 API 注册一个隐藏的配置与所需的依赖关系。
以下 Kotlin 片段显示了为特定工具注册配置所需的内容:
project.configurations.create("someInternalConfigName").apply {
isVisible = false
isTransitive = false
description = "My internal config for resolving tool"
defaultDependencies { deps ->
deps.add(
project.dependencies.create("my.compiler:the-compiler:1.2.3")
)
}
}
在任务执行期间,您可以执行以下操作:
private fun resolveCompilerTool(task: Task): URL =
task.project.configurations.getAt("someInternalConfigName").let {
it.resolve()
assert(it.files.size == 1) { "expect a single dependency file" }
it.files.first().toURI().toURL()
}
开发 Gradle 插件的完全新手。
我正在为定制的人工制品打包工具开发插件。该工具在 Maven 存储库中作为一个 fat jar 可用。有不止一种类型的工具可以完成这项工作,因此插件需要确定它需要哪一种,并向任务图中添加一个解决步骤。
我想我需要:
- 为插件创建配置(“pluginXTools”)
- 找出我需要的工件并将其添加到
DependencyResolutionListener::beforeResolve
- 在我的插件打包任务中添加对解析步骤的依赖。
如何将人工制品分辨率连接到我的任务,使其成为构建图的一部分?有人可以向我展示我想要实现的目标的框架
我在 Gradle slack 中询问并查看了一些现有插件。 Gradle 中解决工具依赖关系的约定是使用插件 API 注册一个隐藏的配置与所需的依赖关系。
以下 Kotlin 片段显示了为特定工具注册配置所需的内容:
project.configurations.create("someInternalConfigName").apply {
isVisible = false
isTransitive = false
description = "My internal config for resolving tool"
defaultDependencies { deps ->
deps.add(
project.dependencies.create("my.compiler:the-compiler:1.2.3")
)
}
}
在任务执行期间,您可以执行以下操作:
private fun resolveCompilerTool(task: Task): URL =
task.project.configurations.getAt("someInternalConfigName").let {
it.resolve()
assert(it.files.size == 1) { "expect a single dependency file" }
it.files.first().toURI().toURL()
}