如何判断是否安装了JRE或JDK

时间:2014-03-20 16:47:59

标签: java macos java-8

我有一台计算机故意安装了JDK。我有另一台带有JRE的计算机,用于测试等。但是,当我在这台计算机上运行java应用程序,然后在另一台计算机上试用它时,它抱怨JDK是必需的。如何检查JDK是否以某种方式安装在我的系统上?注意:有问题的计算机是Mac。

6 个答案:

答案 0 :(得分:138)

您可以打开终端,只需输入

即可
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"

答案 1 :(得分:15)

通常情况下,jdk安装在环境路径变量中有javac ...所以如果你在路径中检查javac,这几乎是你安装jdk的好指标。

答案 2 :(得分:0)

根据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

答案 3 :(得分:0)

@ maciej-cygan很好地描述了该过程,但是为了找到您的java路径:

$ which java

它为您提供java二进制文件的路径,该文件是/usr/bin目录中的链接文件。下一个:

$ cd /usr/bin/ && ls -la | grep java

找到指向的位置,如下所示(对我来说):

enter image description here 然后cd到指向的目录以找到Java的真实主目录。下一个:

$ ls -la | grep java

在这种情况下如下:

enter image description here

在屏幕截图中很明显,我的Java主目录是/usr/lib/jvm/java-11-openjdk-amd64。因此,因此我需要将JAVA_HOME添加到我的bash配置文件(.bashrc.bash_profile等,具体取决于您的操作系统),如下所示:

JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"

您在这里!

答案 4 :(得分:0)

通用的纯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上并不那么可靠...例如...

  • Linux上的许多JRE都包含openjdk路径
  • 不能保证JRE也不包含JDK。

因此,一种更安全的方法是检查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和JDK之间报告JRE的sun.boot.library.path相同。例如,运行以上代码时,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

答案 5 :(得分:0)

  

有问题的计算机是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的JRE也包含javac

相关问题