【发布时间】:2016-01-13 23:14:35
【问题描述】:
我基本了解 build.gradle 构建脚本的各个移动部分,但无法将它们结合在一起。
在 Apache Spark 独立模式下,只是尝试从 build.gradle 在同一个盒子上启动 master 和 worker。 (稍后将通过 $SPARK_HOME/sbin/start-slaves 调用扩展,并使用 masterIP 的正确参数。)
问题:如何将我的 IP 地址分配给 Groovy/build.gradle 中的变量,以便将其传递给 Exec 任务中的命令?我们希望它在几个不同的开发机器上运行。
我们有一个(我认为相当标准的)/etc/hosts 配置,其中 FQDN 和主机名分配给 127.0.1.1。驱动程序可以解决这个问题,但不能使用主机名启动主从服务器,我需要 IP 地址。
我正在尝试:
task getMasterIP (type: Exec){
// declare script scope variable using no def or
executable "hostname"
args += "-I"
// need results of hostname call assigned to script scope variable
sparkMasterIP = <resultsOfHostnameCall>
}
// added this because startSlave stops if Master is already running
task startSlaveOnly(dependsOn:'getMasterIP', type: Exec){
executable "/usr/local/spark/sbin/start-slave.sh"
args += "spark://$sparkMasterIP:7077"
doLast {
println "enslaved"
}
}
// now make startSlave call startSlaveOnly after the initial startMaster
task startSlave(dependsOn:'startMaster', type: Exec) {
finalizedBy 'startSlaveOnly'
}
当我尝试something like suggested in the docs for Exec for Groovy calls:
task getMasterIP (type: Exec){
// declare script scope variable using no def or
sparkMasterIP = executable "hostname"
args += "-I"
}
我收到无法识别可执行文件的警告。
“关于我的想法的更多背景信息”部分,不是主要问题。
谷歌搜索“build.gradle 脚本范围变量”并查看前两个结果,in the basic docs I only see one type of variable and ext properties to be used。
16.4。声明变量 -- 在构建脚本中可以声明两种变量:局部变量和额外属性。
但是在这个other Gradle doc Appendix B. Potential Traps 中,除了 ext 属性之外,我还看到了两种变量作用域:
对于 Gradle 用户来说,了解 Groovy 如何处理非常重要 脚本变量。 Groovy 有两种类型的脚本变量。一个带一个 本地范围和脚本范围的范围。
通过这个示例用法:
String localScope1 = 'localScope1'
def localScope2 = 'localScope2'
scriptScope = 'scriptScope'
我假设我应该使用没有“def”或类型声明的脚本范围变量。对完全不同的方法完全开放,谢谢。
【问题讨论】:
-
你试过
ext.scriptScope吗? -
当我阅读整个问题时,我不确定您是在问如何获取 localIP,还是关于变量范围..
-
@tim_yates 这是用户定义的 ext 上的属性,称为 scriptScope 吗?如果我能将我的 IP 分配给它,我会很高兴
-
@RaGe 核心问题是“问题:如何将我的 IP 地址分配给 Groovy/build.gradle 中的变量,以便我可以将其传递给 Exec 任务中的命令?我们希望它运行在几个不同的开发机器上。”我只是在解释我对使用哪种类型的变量的想法,并说我愿意接受所有级别的建议和更正,谢谢!
-
我只是标记了我自己的问题以改进它,欢迎提出建议。
标签: groovy gradle apache-spark build.gradle master