在 Gradle 脚本中修改了 PATH 环境变量
Modified PATH environment variable in Gradle script
我是运行宁Gradle脚本。一开始我打印PATH环境变量:
println System.getenv( 'PATH' )
输出为:
/usr/bin:/bin:/usr/sbin:/sbin
但真正的 PATH 环境变量是(从终端打印):
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sh........
问题是,为什么 PATH 环境变量在 Gradle 脚本和终端中不计算?
事实是,我正在构建 Android,它使用 Gradle 作为构建系统。我有 C++ 代码,它是由 CMake 构建的。在 CMake 中,我 运行 一些 python 脚本,它们执行一些外部命令。但是当 Gradle 更改 PATH 变量时,找不到这些命令并且出现错误。在执行这些命令时,不能选择使用完整路径,例如:
/usr/local/bin/my_mega_command
当我直接 运行 CMake 或 python 脚本时,一切都按预期工作。
Android Studio 不会将其环境传递给它生成的 Gradle 守护进程。通常,我们会以缺少自定义环境变量的形式看到这种情况,但显然它也会影响 PATH
更改。
我遇到了完全相同的问题,其中来自终端(Android Studio 内部或外部)的 运行 gradle 任务将正确采用环境中设置的 PATH(即通过 . zprofile 或任何其他可能的方法),但不是在 运行 通过 Android Studio 工具栏中的 Gradle 命令时。最终对我有用的是将 JDK 版本从 Android Studio (JDK 11) 附带的版本更改为 JDK 1.8,然后它突然起作用了。我不知道为什么这会改变任何东西,但现在 PATH 是从系统中设置的环境中获取的,一切正常。
我是运行宁Gradle脚本。一开始我打印PATH环境变量:
println System.getenv( 'PATH' )
输出为:
/usr/bin:/bin:/usr/sbin:/sbin
但真正的 PATH 环境变量是(从终端打印):
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sh........
问题是,为什么 PATH 环境变量在 Gradle 脚本和终端中不计算?
事实是,我正在构建 Android,它使用 Gradle 作为构建系统。我有 C++ 代码,它是由 CMake 构建的。在 CMake 中,我 运行 一些 python 脚本,它们执行一些外部命令。但是当 Gradle 更改 PATH 变量时,找不到这些命令并且出现错误。在执行这些命令时,不能选择使用完整路径,例如:
/usr/local/bin/my_mega_command
当我直接 运行 CMake 或 python 脚本时,一切都按预期工作。
Android Studio 不会将其环境传递给它生成的 Gradle 守护进程。通常,我们会以缺少自定义环境变量的形式看到这种情况,但显然它也会影响 PATH
更改。
我遇到了完全相同的问题,其中来自终端(Android Studio 内部或外部)的 运行 gradle 任务将正确采用环境中设置的 PATH(即通过 . zprofile 或任何其他可能的方法),但不是在 运行 通过 Android Studio 工具栏中的 Gradle 命令时。最终对我有用的是将 JDK 版本从 Android Studio (JDK 11) 附带的版本更改为 JDK 1.8,然后它突然起作用了。我不知道为什么这会改变任何东西,但现在 PATH 是从系统中设置的环境中获取的,一切正常。