首页 > 解决方案 > Gradle 插件开发:解决工具伪影的惯用方法

问题描述

完成开发 Gradle 插件的菜鸟。

我正在为定制的人工制品打包工具开发一个插件。该工具可作为 maven 存储库中的 fat jar 使用。有不止一种工具可以完成这项工作,因此插件需要确定它需要哪一种,并在任务图中添加一个解决步骤。

我想我需要:

  1. 为插件创建配置(“pluginXTools”)
  2. 找出我需要的人工制品并将其添加到DependencyResolutionListener::beforeResolve
  3. 在我的插件打包任务中添加对解决步骤的依赖。

如何将人工制品分辨率连接到我的任务,使其成为构建图的一部分?有人可以向我展示我正在努力实现的目标吗

标签: gradlegradle-plugin

解决方案


我在 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()
    }


推荐阅读