Deployment 根据执行的Gradle任务将不同的文件复制到构建目录

Deployment 根据执行的Gradle任务将不同的文件复制到构建目录,deployment,properties,zip,gradle,multi-tier,Deployment,Properties,Zip,Gradle,Multi Tier,我已经为Gradle创建了一个插件来部署到我公司的OpenVMS目录结构中,它将deployDev,deployTest,并且在提供凭据时,将deployProd任务添加到应用程序构建中。我已将所有环境的配置文件提取到一个单独的项目中,以便我们可以从应用程序中单独部署配置 这些自定义任务取决于应用程序插件的distZip任务,我还没有找到一种好方法,可以根据调用的任务将适当的配置文件放入zip(例如deployDev包括dev config) 我已尝试让deploy*任务在配置阶段通过以下方式复

我已经为Gradle创建了一个插件来部署到我公司的OpenVMS目录结构中,它将
deployDev
deployTest
,并且在提供凭据时,将
deployProd
任务添加到应用程序构建中。我已将所有环境的配置文件提取到一个单独的项目中,以便我们可以从应用程序中单独部署配置

这些自定义任务取决于应用程序插件的
distZip
任务,我还没有找到一种好方法,可以根据调用的任务将适当的配置文件放入zip(例如
deployDev
包括dev config)

我已尝试让deploy*任务在配置阶段通过以下方式复制配置文件:

task distZip(type:Zip, overwrite:true) {
   archiveName = 'config.zip'
   from "build/props"
}

deployDev.configure {
    copyResources('dev')
}

deployTest.configure {
    copyResources('test')
}

project.tasks.findByName('deployProd')?.configure {
    copyResources('prod')
}

def copyResources(String environment){
    copy {
        from "src/$environment/resources"
        into 'build/props'
    }
}
由于在所有任务上都执行了配置阶段,因此这不起作用,因此即使在执行
deployDev
时,测试配置也会被复制到dev资源上

我也尝试过:

file('build/props').mkdirs()

task distZip(type:Zip, overwrite:true) {
   archiveName = 'config.zip'
   from "build/props"
   outputs.upToDateWhen {false}
}

gradle.taskGraph.whenReady { graph ->
   if (graph.hasTask('deployProd')) {
       copyResources('prod')
   }else if(graph.hasTask('deployTest')){
       copyResources('test')
   }else if(graph.hasTask('deployDev')){
      copyResources('dev')
   }
}


def copyResources(String environment){
   copy {
        from "src/$environment/resources"
        into 'build/props'
    }
}

但是,使用此方案时,
distZip
任务始终是最新的。有正确的方法吗?

您说“这些自定义任务取决于应用程序插件的distZip任务”,但实际上您覆盖了该任务。为什么?此外,部署任务除了向发行版zip添加资源之外还能做什么?我在这个特定的构建中覆盖了distZip,但是我们的大多数应用程序都可以使用我的插件而不覆盖任务。我必须承认,我不记得为什么我过度编写了任务,因此我将更改构建以仅配置distZip。部署任务的目的实际上是将distZip的输出移动到我们的OpenVMS服务器(dev、test或prod)并部署发行版,发行版通常是一个应用程序,但在本例中只是应用程序配置。也许我过度编写任务是为了避免调用
compileJava
processResources
jar
开始编写任务,但它们似乎没有伤害任何东西。事实上,我可能能够使用processResources任务来实现我所需要的,所以我将尝试一下。