从bash移植到Gradle

从bash移植到Gradle,bash,testing,build,gradle,build-automation,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 因此,它所做的就是从不同的项目下载我想要的归档文件,将其资产复制到当前项目的工作区,删除所述归档文

我有一个项目的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运行脚本(不在其中运行测试-可以通过
build.gradle
本身中的任务依赖项来定义):

使用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()
}

可以找到完整的示例。

只是一个简单的问题;我如何从这个脚本中调用
gradletest
命令?
test
任务也可以接受一些参数,并且运行一个简单的
commandLine
调用会使Gradle不高兴。您需要定义测试和下载任务之间的依赖关系。读一下,好的,谢谢!再来一次;是否有办法替换第二个
项目。将
复制到从目录a移动到目录b的语句中?gradle不能100%确定,但可以使用java/groovy移动文件。
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()
    }
}