在 Windows 8.1 上,“javac -version”有效,但 Cordova 无法识别
Posted
技术标签:
【中文标题】在 Windows 8.1 上,“javac -version”有效,但 Cordova 无法识别【英文标题】:On Windows 8.1 "javac -version" works but Cordova doesn't recognize it 【发布时间】:2018-09-05 04:29:48 【问题描述】:我正在尝试设置 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
但是我可以运行 javac -version
就好了。
C:\>javac -version
javac 1.8.0_161
我尝试以各种方式设置JAVA_HOME
:指向根;指向bin
文件夹;将其设置为用户变量和系统变量;将%JAVA_HOME%\bin
添加到Path
(用于用户和系统)等等。
我查看了几篇关于这个问题的文章,他们说如果我能够使用javac -version
,那么这应该表明我的环境变量设置正确。即使是这样,科尔多瓦似乎仍然没有认出来。
更新
按照 Stephen C 的说明,我已重置变量,但我的错误仍然存在。正如您在图像中看到的,我可以调用 javac
就好了,JAVA_HOME
和 Path
似乎都以正确的方式设置。 (注意实际上是%JAVA_HOME%\bin
而不是Path
中的C:\Program Files\Java\jdk1.8.0_161\bin
。)
【问题讨论】:
您的 JAVA_HOME 无效。它不应该指向 JDK 的“bin”目录。 (运行javac -version
的“测试”不会验证JAVA_HOME,因为javac
命令不使用JAVA_HOME。您发现的文章具有误导性......或者您误读了它们。)
我很抱歉这么说,但这并没有多大帮助。我已经尝试了所有可能的方法来设置这些变量,无论是否使用 bin。
可能是空格字符问题(Windows 历来不能很好地处理空格)。尝试将 C:\Program Files\Java\jdk1.8.0_161 替换为 %ProgramFiles%\Java\jdk1.8.0_161
谢谢你的提示,但还是一样。我已经尝试过您建议的混合大小写,但也尝试使用所有大写字母。一切正常,但 Cordova 出于某种原因无法识别它。
你说%JAVA_HOME\bin%
。你的意思是%JAVA_HOME%\bin
吗?
【参考方案1】:
我认为你混淆了 JAVA_HOME、PATH 和 CLASSPATH
JAVA_HOME 变量应设置为单个目录的名称。不是带有分隔符的多个目录。 JAVA_HOME 目录是 JDK 或 JRE 安装的***目录。不是“bin”目录。
PATH 和 CLASSPATH 变量由路径列表组成。对于 PATH,路径是目录的路径名。对于 CLASSPATH,路径是目录或 JAR / ZIP 文件(或特定类型的通配符)的路径名。
如果您使用简单名称的命令名称,则 PATH 是 shell 搜索命令的位置;例如java
或 javac
。
`
你的错误信息是这样的:
您的 JAVA_HOME 无效:
C:\Program Files\Java\jdk1.8.0_161;C:\Program Files\Java\jdk1.8.0_161\bin
这是错误的,原因有两个:
-
JAVA_HOME 不应该是路径
C:\Program Files\Java\jdk1.8.0_161\bin 不是 Java 主目录。 Java 主页是 C:\Program Files\Java\jdk1.8.0_161 .... 可能。
您可能弄错的另一件事是环境变量的更改不一定会传播。例如,如果您启动 shell,然后通过 Windows GUI 更改环境变量,则更改可能不会传播到 shell。您可能需要退出 shell 并重新启动它以获取新值。
如果您不确定,可以运行(例如)echo %PATH%
以查看当前 shell 或脚本中 PATH
的当前值。
更新
根据http://cordova.apache.org/docs/en/7.x/guide/platforms/android/index.html,你需要:
安装 Android Studio 将ANDROID_HOME
环境变量设置为您的Android SDK 安装位置。
还建议您将 Android SDK 的 tools、tools/bin 和 platform-tools 目录添加到您的 PATH
。
【讨论】:
感谢您的努力,如果我的示例不清楚,我们深表歉意。我已经完全按照您之前所说的进行了尝试,但这也不起作用。但是为了它,我只是尝试了你告诉我的。将一切恢复原状(每个变量都恢复到原来的状态),然后将JAVA_HOME
设置为C:\Program Files\Java\jdk1.8.0_161
。但是现在我什至不能再运行javac -version
了。如果您在 Google 中输入“JAVA_HOME 无效”,那么您几乎会看到所有 Stack Overflow 问题以及我为解决问题而经历的其他文章,但到目前为止还没有任何解决方案。
“但是现在我什至不能运行 javac -version 了。” 那是因为 PATH 现在不正确了。您将 PATH 设置为什么??
"...您几乎可以看到所有 Stack Overflow 问题以及我为解决问题而阅读的其他文章" - 请参阅我的“And . ..不幸的是......”放在一边。 StackOveflow 中有许多不起作用的剪切和粘贴“解决方案”。正如我所说,了解 1)环境变量是如何工作的,以及 2)这 3 个特定的变量是做什么的,你就会明白你的问题是什么。
从你写的我明白了以下几点。 JAVA_HOME
应该是 Java 的家。但除此之外,我还必须将“路径”留给Path
中的bin
文件夹,这样当我执行命令时,系统就知道去哪里查找了。现在我有了:JAVA_HOME=C:\Program Files\Java\jdk1.8.0_161
和 Path=C:\ProgramData\Oracle\Java\javapath;%JAVA_HOME%\bin;%JAVA_HOME%\bin;
(请注意,我的 Path
中还有更多,但这两个是 Java 相关的,我已经手动设置了第二个)。但是:问题仍然存在。至少当我输入javac -version
时,我得到了我想要的。
你可能想运行dir c:\ /x
并使用程序文件目录的短名称,应该是progra~1或类似【参考方案2】:
从 C:\Windows\System32(如果有)中删除 java.dll。
我不确定,但它可能会正常工作。
【讨论】:
System32 文件夹中没有 java.dll(至少对我而言)。以上是关于在 Windows 8.1 上,“javac -version”有效,但 Cordova 无法识别的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 8.1 上运行 Windows 10 通用应用
regopenkeyex 在 Windows 8.1 上返回 2
如何在 Windows Phone 8.1 / Windows 10 上创建自定义 VirtualizingPanel?