gradle - Kotlin 上 Gradle 脚本中的命令行问题
问题描述
我正在 Gradle 中编写任务以使用我的 Docker 容器。其中一个将杀死并移除 2 个容器。Linux中的常用命令看起来像
docker-compose -f docker-compose.yml kill postgresql redis wap-pattern && docker-compose -f docker-compose.yml rm -f wap-pattern postgresql redis
它工作正常,但在 Kotlin 中我必须使用参数列表,所以在我的代码中它看起来像
tasks.register<Exec>("downAll") {
group = "docker"
commandLine = listOf("docker-compose", "-f", "docker-compose.yml", "kill", "postgresql", "redis", "&&", "docker-compose", "-f", "docker-compose.yml", "rm", "-f", "postgresql", "redis")
}
不幸的是,它根本不起作用,并以错误代码退出。显然 Kotlin 没有正确解析&&。
那么,我该如何处理这个问题并使我的任务有效呢?我可以在同一个任务主体中以某种方式避免 & 并调用命令行执行 2 次吗?
解决方案
您不能使用&&
,但可以使用第二种方式在 gradle 上声明任务类型。
tasks.register("downAll") {
group = "docker"
doLast {
exec {
commandLine = listOf("docker-compose", "-f", "docker-compose.yml", "rm", "-f", "postgresql", "redis")
}
}
doLast {
exec {
commandLine = listOf("docker-compose", "-f", "docker-compose.yml", "kill", "postgresql", "redis")
}
}
}
如果您只想多次重复相同的命令行,我建议您使用 kotlin 的重复功能
tasks.register("downAll") {
doLast {
repeat(2) {
exec {
commandLine = listOf("docker-compose", "-f", "docker-compose.yml", "kill", "postgresql", "redis")
}
}
}
}
推荐阅读
- python - 将 python xml 响应打印到 HTML 页面中
- dataframe - 如何转换数组
排列 - wordpress - wordpress 订阅者何时成为 woocommerce 客户?
- ios - 如何快速获取嵌套表视图中的主表视图索引
- android - 我什么时候可以停止使用 AppCompat 或 Support 库?
- reactjs - recharts 导入导致 es6 失败
- python - 使用 python,是否可以在达到特定 RAM 使用率之前终止“.exe”应用程序?
- javascript - 布尔 if 语句的赋值表达式左侧无效
- mysql - 想要从 laravel 中的关系数据库中获取值时出错
- linear-programming - 如何解决 PySCIPOpt 模型的线性松弛问题