在gradle任务中动态解析依赖关系

时间:2014-01-27 07:40:47

标签: gradle

我正在尝试构建一个gradle插件,它执行以下操作:

  1. 作为其任务的一部分,它会创建一个新配置
  2. 它为此配置添加了一个DefaultExternalModuleDependency - 更具体地说,它构建了对应用程序服务器zip文件的依赖关系(在Nexus上可用)。调用项目也可以覆盖此信息。
  3. 尝试解析此新添加的依赖项,然后将该文件解压缩到本地文件夹
  4. 当我在构建文件中对硬编码进行了详细编码时,所有这些都运行良好,但看起来像添加依赖项作为任务的一部分并不像在解析时获得该信息一样。

    所以我的问题是,如何让项目重新加载配置/依赖项?

    代码如下所示:

    @TaskAction
    void installAppserver() {
      Dependency dependency = new DefaultExternalModuleDependency(group,name,version)
      Configuration configuration = project.configurations.detachedConfiguration(dependency)
      configuration.setTransitive(false)
      configuration.files.each { file ->
        if (file.isFile() && file.name.endsWith('.zip')) {
          println 'Attempting to unzip: ' + file + ' into folder: ' + appServerFolder
          new Copy().from(project.zipTree(file)).into(appServerFolder).execute()
        }
      }
    }
    

    问题是实际的工件没有得到解决!

1 个答案:

答案 0 :(得分:3)

任务无法配置构建模型(这就是插件的作用)。可以在任务中创建和解析分离的配置。如果这不起作用,则任务代码或其尝试解析的依赖项可能存在问题。请注意,只有在定义了正确的存储库时才能解析依赖关系。

应使用new DetaultExternalModuleDependency()而不是project.dependencies.create()(内部类)。不能new Copy().execute()(不能从用户代码调用Task#execute),而应使用project.copy