从bash移植到Gradle

时间:2015-02-21 20:32:27

标签: bash testing build gradle build-automation

我有一个项目的Bash脚本,如下所示:

#!/usr/bin/env bash

curl -LOk (url)/project.zip
mkdir project
unzip project.zip -d project
cp -rf project/assets assets
rm -rf project && rm -rf project.zip
gradle test

所以它只是从一个不同的项目下载我想要的档案,将其资产复制到当前项目的工作区,删除所述档案和我不想要的提取的东西,然后运行一个测试套件,以确保一切正常。由于我使用Gradle来运行测试套件,我想将所有内容迁移到100%Gradle,以便构建过程可以是1)多平台& 2)轻松管理,因为我的构建脚本不断维护。我该怎么做呢?经过一番研究,我遇到了gradle-download-task;这有助于处理下载部分,还是有更好的替代方案?

1 个答案:

答案 0 :(得分:2)

有三种方法:

首先(不是跨平台方法)

直接从gradle运行脚本(不在其中运行测试 - 可以通过build.gradle本身中的任务依赖来定义):

task download1(type: Exec) {
   executable 'sh'
   args 'download.sh'
}

<强>第二

使用groovy + gradle magic:

task download2 << {
   def file = project.file('sample2.zip')   
   def out = new BufferedOutputStream(new FileOutputStream(file))
   out << new URL(zipUrl).openStream()
   out.close()
   project.copy {
      from zipTree(file)
      into 'project2'
   }
   project.copy {
      from project.file('project2/assets')
      into 'assets2'
   }
   project.file('project2').deleteDir()
   project.file('sample2.zip').delete()
}

<强>第三

使用您找到的插件:

task download3(type: Download) {
    def destination = new File(rootDir, 'sample3.zip')
    src zipUrl
    dest destination
    doLast {
      project.copy {
         from zipTree(destination)
         into 'project3'
      }
      project.copy {
         from project.file('project3/assets')
         into 'assets3'
      }
      project.file('project3').deleteDir()
      project.file('sample3.zip').delete()
    }
}

可以找到完整示例here