从 bash 移植到 Gradle
Porting from bash to Gradle
我有一个 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;这会有助于处理下载段,还是有更好的选择?
有 3 种方法:
首先(不是跨平台方法)
运行 直接来自 gradle 的脚本(其中没有 运行 测试 - 它可以通过 build.gradle
本身的任务依赖性来定义):
task download1(type: Exec) {
executable 'sh'
args 'download.sh'
}
第二
使用groovy+gradle魔法:
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。
我有一个 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;这会有助于处理下载段,还是有更好的选择?
有 3 种方法:
首先(不是跨平台方法)
运行 直接来自 gradle 的脚本(其中没有 运行 测试 - 它可以通过 build.gradle
本身的任务依赖性来定义):
task download1(type: Exec) {
executable 'sh'
args 'download.sh'
}
第二
使用groovy+gradle魔法:
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。