[英]How to tell if JRE or JDK is installed
我有一台我特意安装了 JDK 的计算机。 我有另一台带有 JRE 的计算机,用于测试等。 但是,当我在这台计算机上运行一个 java 应用程序,然后在另一台计算机上尝试它时,它抱怨需要 JDK。 如何检查 JDK 是否以某种方式安装在我的系统上? 注意:有问题的计算机是 Mac。
您可以打开终端并简单地输入
java -version // this will check your jre version
javac -version // this will check your java compiler version if you installed
这应该会显示系统上安装的 java 版本(假设您已经在系统环境中设置了 java 的路径)。
如果你还没有,通过添加它
export JAVA_HOME=/path/to/java/jdk1.x
如果您不确定您的系统上是否有 Java,只需在终端中使用find
即find / -name "java"
通常,jdk 安装在环境路径变量中有 javac ......因此,如果您在路径中检查 javac,这几乎是您安装了 jdk 的一个很好的指标。
@maciej-cygan 很好地描述了这个过程,但是为了找到你的 java 路径:
$ which java
它为您提供了java
二进制文件的路径,该文件是/usr/bin
目录中的链接文件。 下一个:
$ cd /usr/bin/ && ls -la | grep java
找到如下所示的指向位置(对我而言):
然后
cd
到指向的目录以找到 Java 的真正主目录。 下一个:
$ ls -la | grep java
在这种情况下如下:
因此,在屏幕截图中很明显,我的 Java 主目录是/usr/lib/jvm/java-11-openjdk-amd64
。 因此,相应地,我需要将 JAVA_HOME 添加到我的 bash 配置文件( .bashrc
、 .bash_profile
等,具体取决于您的操作系统),如下所示:
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
干得好!
根据JAVA文档,JDK应该安装在这个路径:
/Library/Java/JavaVirtualMachines/jdkmajor.minor.macro[_update].jdk
请参阅https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html 上的卸载 JDK 部分
因此,如果您可以找到这样的文件夹,则安装了 JDK
一个通用的纯 Java 解决方案..
对于 Windows 和 MacOS,可以推断出以下内容(大部分时间)...
public static boolean isJDK() {
String path = System.getProperty("sun.boot.library.path");
if(path != null && path.contains("jdk")) {
return true;
}
return false;
}
但是......在Linux上这并不可靠......例如......
openjdk
的路径 因此,更安全的方法是检查javac
可执行文件是否存在。
public static boolean isJDK() {
String path = System.getProperty("sun.boot.library.path");
if(path != null) {
String javacPath = "";
if(path.endsWith(File.separator + "bin")) {
javacPath = path;
} else {
int libIndex = path.lastIndexOf(File.separator + "lib");
if(libIndex > 0) {
javacPath = path.substring(0, libIndex) + File.separator + "bin";
}
}
if(!javacPath.isEmpty()) {
return new File(javacPath, "javac").exists() || new File(javacPath, "javac.exe").exists();
}
}
return false;
}
警告:对于在 JRE 和 JDK 之间报告 JRE 的sun.boot.library.path
相同的 JRE + JDK 组合,这仍然会失败。 例如,当上面的代码运行时,Fedora 的 JDK 将失败(或通过,取决于你如何看待它)。 有关更多信息,请参阅下面的单元测试...
单元测试:
# Unix
java -XshowSettings:properties -version 2>&1|grep "sun.boot.library.path"
# Windows
java -XshowSettings:properties -version 2>&1|find "sun.boot.library.path"
# PASS: MacOS AdoptOpenJDK JDK11
/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home/lib
# PASS: Windows Oracle JDK12
c:\Program Files\Java\jdk-12.0.2\bin
# PASS: Windows Oracle JRE8
C:\Program Files\Java\jre1.8.0_181\bin
# PASS: Windows Oracle JDK8
C:\Program Files\Java\jdk1.8.0_181\bin
# PASS: Ubuntu AdoptOpenJDK JDK11
/usr/lib/jvm/adoptopenjdk-11-hotspot-amd64/lib
# PASS: Ubuntu Oracle JDK11
/usr/lib/jvm/java-11-oracle/lib
# PASS: Fedora OpenJDK JDK8
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.141-1.b16.fc24.x86_64/jre/lib/amd64
#### FAIL: Fedora OpenJDK JDK8
/usr/java/jdk1.8.0_231-amd64/jre/lib/amd64
有问题的计算机是 Mac。
仅适用于 macOS 的解决方案:
/usr/libexec/java_home -v 1.8+ --exec javac -version
其中1.8+
是 Java 1.8 或更高版本。
不幸的是, java_home
助手没有设置正确的返回码,因此检查失败需要解析输出(例如2>&1 |grep -v "Unable"
),该输出因区域设置而异。
请注意,Java 也可能存在于/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin
,但在撰写本文时,我不知道安装在那里的 JRE 也包含javac
。
在macos终端上,您可以输入:
java -version
(对于jre)
javac -version
(用于编译器版本)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.