[java] JRE 또는 JDK가 설치되어 있는지 확인하는 방법

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

그리고 시스템에 자바가 있는지 확실하지 않으면 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입니다. 그래서 따라 나는 (내 bash는 프로필에 JAVA_HOME을 추가 할 필요가 .bashrc, .bash_profile아래처럼 OS에 따라 등) :

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에서는 이것이 신뢰할 수 없습니다 … 예를 들어 …

  • 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;
}

경고 :sun.boot.library.path JRE와 JDK간에 JRE를 동일하게 보고하는 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않습니다.


답변