Gradle 在渐变任务中动态解析依赖项

Gradle 在渐变任务中动态解析依赖项,gradle,Gradle,我正在尝试构建一个gradle插件,它可以实现以下功能: @TaskAction void installAppserver() { Dependency dependency = new DefaultExternalModuleDependency(group,name,version) Configuration configuration = project.configurations.detachedConfiguration(dependency) configurat

我正在尝试构建一个gradle插件,它可以实现以下功能:

@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()
    }
  }
}
  • 作为its任务的一部分,它创建一个新配置
  • 它向该配置添加了一个DefaultExternalModuleDependence——更具体地说,它构造了对应用程序服务器zip文件的依赖关系(可在Nexus上获得)。调用项目也可以覆盖此信息
  • 尝试解析此新添加的依赖项,然后将文件解压缩到本地文件夹
  • 当我在构建文件中硬编码细节时,所有这些都很好地工作,但是看起来添加依赖项作为任务的一部分,并不像在解析时使用该信息那样处理

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

    代码如下所示:

    @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()
        }
      }
    }
    

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

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


    应该使用
    project.dependencies.create()
    而不是
    new detaulttexternalmoduledependency()
    (这是一个内部类)。不应使用
    project.Copy().execute()
    Task#execute
    )而应使用
    project.Copy

    否。不走运。当我在调试模式下运行代码时,我注意到存储库是存在的;使用正确的存储库查找依赖项;TransientConfigurationBuilder说它已经加载了“已解析的配置结果”,然后它就停止了!我不知道现在如何调试这个。有什么想法吗?不知道所有细节就说不出来。这不是一个普遍的问题,因为许多现有任务已经完成了与您尝试完成的任务相同的任务。也许可以看看Gradle代码库中的代码质量插件。我正在调试代码,注意到在我尝试动态解析配置时从未调用“DefaultModuleDescriptor.addArtifact()”方法。没关系。。发现我的错误。。没有指定文件扩展名。另一方面,我仍然将此标记为一个答案,因为这次讨论帮助我清理了我的插件并找到了正确的位置。谢谢你,彼得。