gradle - Gradle 插件开发:解决工具伪影的惯用方法
问题描述
完成开发 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()
}
推荐阅读
- python - 容器被 ApplicationMaster 杀死。退出代码是 143
- javascript - 如何在 vue2leaflet 多边形中设置一个类?
- excel - 使用 VBA 外部引用来引用已关闭的工作簿 UDF
- azure-devops - 将每个子文件夹发布为自己的工件
- jquery - jquery remove div 和后面 div 中的侧边栏也被删除
- architecture - 需要建议设计一个可以水平扩展“请求执行器”调度程序的系统
- .net - PowerShell 通过 PROXY 验证 URL 的 SSL 证书到期日期
- postgresql - 在 Postgres 中插入数据时,在 JOLTTransformJSON 之后出现 PutDatabaseRecord 问题
- r - 如何在R中组合来自csv不同行的数据?
- node.js - 如何将用户名添加到 allsocketsIo() 函数