Gradle -v 命令指向旧版本

Gradle -v command points to old version

目前我正在尝试将 Gradle 2.0 更新到 2.11。在我的 gradle 发行版 (2.11) 的 getting-started.html 文件中描述了如何安装较新的 Gradle 版本。我将 .zip 解压缩到所需位置并解压缩。我相应地设置了环境变量 GRADLE_HOME,它包含在 PATH.

然而 gradle -v 将打印:

------------------------------------------------------------
Gradle 2.0
------------------------------------------------------------

Build time:   2014-07-01 07:45:34 UTC
Build number: none
Revision:     b6ead6fa452dfdadec484059191eb641d817226c

我使用 Get-Childitem env:GRADLE_HOME 检查了我的环境变量,它确实打印:

Name                           Value
----                           -----
GRADLE_HOME                    C:\dev\programs\gradle-2.11

重新启动 PowerShell 甚至计算机都没有帮助。我还设置了一个指向 GRADLE_USER 的变量(指向 .gradle 文件夹)是否存在已知问题?或者我只是在安装过程中遗漏了什么?

PowerShell 将 运行 没有路径的可执行文件,仅当它们位于 PATH 环境变量(PowerShell 中的 $env:Path)中列出的文件夹之一时。很可能您仍然在那里列出旧安装的路径(类似于 ...;C:\dev\programs\gradle-2.0\bin;...)。根据定义的位置,您需要在系统或用户环境中更改它。

您可以避免在每次 Gradle 更新时更新 PATH 环境变量,方法是在其中使用 GRADLE_HOME 环境变量。但是,要使其正常工作,您必须将相应的注册表值设置为 REG_EXPAND_SZ 值(默认值为 REG_SZ)。系统环境存储在此注册表项中:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

用户环境存储在此键中:

HKEY_CURRENT_USER\Environment

您可以将 PATH 值的类型更改为 REG_EXPAND_SZ,方法如下:

$key  = 'HKEY_CURRENT_USER\Environment'
$path = [Microsoft.Win32.Registry]::GetValue($key, 'PATH', $null)
$path += ';%GRADLE_HOME%\bin'
[Microsoft.Win32.Registry]::SetValue($key, 'PATH', $path, 'ExpandString')

或者(更详细一点)像这样:

$key  = 'HKEY_CURRENT_USER\Environment'
$path = [Microsoft.Win32.Registry]::GetValue($key, 'PATH', $null) -split ';' |
        Where-Object { $_ -notlike '*gradle*' }
$path = (@($path) + '%GRADLE_HOME%\bin') -join ';'
[Microsoft.Win32.Registry]::SetValue($key, 'PATH', $path, 'ExpandString')

后者会在添加基于 GRADLE_HOME 的路径之前从环境变量中删除现有的 Gradle 路径。

$key更改为系统环境密钥以修改系统而不是您的用户环境(需要管理员权限)。

通过将 %GRADLE_HOME%\bin 放入 PATH(并让操作系统通过将注册表值设置为 REG_EXPAND_SZ 来扩展变量)PowerShell 将始终使用 gradle.exe来自 bin 目录中的 $env:GRADLE_HOME.