You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Gradle的Exec任务中访问配置的环境变量?

Gradle Exec任务环境变量访问问题解决

问题根源

你代码里的$NAME无法访问,核心是混淆了Gradle脚本上下文和子进程上下文:

  • 通过environment()设置的变量,是给echo这类子进程用的环境变量,不属于Gradle脚本本身的可直接引用变量;
  • argumentProviders的代码在Gradle脚本环境中执行,直接写$NAME只会查找脚本内定义的变量,自然取不到值。

解决方案

方案1:直接传递参数(无需环境变量)

如果只是要把指定字符串传给echo,没必要绕环境变量,直接在脚本里定义变量传递即可:

tasks {
    register<Exec>("run") {
        val name = "mohammad"
        executable = "echo"
        argumentProviders.add { listOf(name) }
    }
}

方案2:让子进程通过环境变量读取(依赖shell)

如果业务场景确实需要子进程通过环境变量获取值,可以用bash -c调用shell,让shell解析环境变量(注意转义$或用单引号避免Gradle提前解析):

tasks {
    register<Exec>("run") {
        environment(mapOf(
            "NAME" to "mohammad",
        ))
        // 用\$转义让shell处理变量,或用单引号包裹echo内容
        commandLine("bash", "-c", "echo \$NAME")
    }
}

方案3:从任务的environment属性中取值

如果不想依赖shell,可直接从Exec任务的environment属性里取出已设置的值,传递给参数:

tasks {
    register<Exec>("run") {
        environment(mapOf(
            "NAME" to "mohammad",
        ))
        executable = "echo"
        argumentProviders.add { 
            listOf(environment["NAME"].orEmpty())
        }
    }
}

内容的提问来源于stack exchange,提问作者Mohammad Abdollahzadeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:02:11