在Windows 8.1"javac -version"有效,但Cordova无法识别它

Let*_*ren 8 java android cordova phonegap-build

我正在尝试建立Cordova.当我运行时cordova build android收到以下错误:

(node:6816) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Failed to run "javac -version", make sure that you have a JDK installed.
You can get it from: http://www.oracle.com/technetwork/java/javase/downloads.
Your JAVA_HOME is invalid: C:\Program Files\Java\jdk1.8.0_161;C:\Program Files\Java\jdk1.8.0_161\bin
Run Code Online (Sandbox Code Playgroud)

但是我可以运行javac -version得很好.

C:\>javac -version
javac 1.8.0_161
Run Code Online (Sandbox Code Playgroud)

我试图以JAVA_HOME各种方式设置:指向根; 指向bin文件夹; 将其设置为User变量,也设置为System one; 添加%JAVA_HOME%\binPath(用户和系统)等等.

我已经检查了几篇关于这个问题的文章,并且他们说如果我能够使用javac -version那么那应该表明我的环境变量设置正确.即使是这样,科尔多瓦似乎仍然没有认识到它.

更新

遵循Stephen C的指示,我已经重置了我的变量,但我的错误仍然存​​在.正如你可以在图片中看到,我可以打电话javac就好了,都JAVA_HOMEPath似乎以正确的方式进行设置.(注意,它实际上是,%JAVA_HOME%\bin而不是C:\Program Files\Java\jdk1.8.0_161\binPath.)

在此输入图像描述

Ste*_*n C 4

我认为你混淆了 JAVA_HOME、PATH 和 CLASSPATH

  • JAVA_HOME 变量应设置为单个目录的名称。没有多个带有分隔符的目录。JAVA_HOME 目录是 JDK 或 JRE 安装的顶级目录。不是“bin”目录。

  • PATH 和 CLASSPATH 变量由路径列表组成。对于 PATH,路径是目录的路径名。对于 CLASSPATH,路径是目录或 JAR / ZIP 文件(或特定类型的通配符)的路径名。

  • 如果您使用简单名称的命令名称,则 PATH 是 shell 搜索命令的位置;例如javajavac。`

  • CLASSPATH 是您可以告诉 Java 工具查找已编译的类以进行加载、编译等的方法之一。

您的错误消息是这样的:

您的 JAVA_HOME 无效:

C:\Program Files\Java\jdk1.8.0_161;C:\Program Files\Java\jdk1.8.0_161\bin
Run Code Online (Sandbox Code Playgroud)

这是错误的,原因有二:

  1. JAVA_HOME 不应该是路径
  2. C:\Program Files\Java\jdk1.8.0_161\bin 不是 Java 主目录。Java 主目录是 C:\Program Files\Java\jdk1.8.0_161 .... 可能。

您可能犯的另一件事是,环境变量的更改不一定会传播。例如,如果启动 shell,然后通过 Windows GUI 更改环境变量,则更改可能不会传播到 shell。您可能需要退出 shell 并重新启动它才能获取新值。

如果您不确定,您可以运行(例如)来查看当前 shell 或脚本中echo %PATH%的当前值。PATH

更新

根据http://cordova.apache.org/docs/en/7.x/guide/platforms/android/index.html,您需要:

  • 安装Android Studio
  • 将环境变量设置ANDROID_HOME为 Android SDK 安装位置。

还建议您将 Android SDK 的工具、tools/bin 和 platform-tools 目录添加到您的PATH.