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


134

JDK를 의도적으로 설치 한 컴퓨터가 하나 있습니다. 테스트를 위해 JRE가있는 다른 컴퓨터가 있습니다. 그러나이 컴퓨터에서 Java 응용 프로그램을 작동시키고 다른 컴퓨터에서 시도했을 때 JDK가 필요하다는 불만이 제기되었습니다. JDK가 어떻게 시스템에 설치되었는지 어떻게 확인할 수 있습니까? 참고 : 해당 컴퓨터는 Mac입니다.


1
실행 방법을 포함하여 오류의 전체 텍스트를 게시 할 수 있습니까? Java 프로그램을 실행하기 위해 JDK가 필요하지 않고 JRE 만 있으면됩니다.
Kevin Workman

명령 줄 도구를 설치하는 것에 관한 친구 컴퓨터였습니다. 다시 검사 할 기회가 생기면 다시 언급하겠습니다.
PopKernel

Java가 당신의 길에 있는지 확인하는 것에 대해 이야기하는 것처럼 들리지만, 그것은 추측 일뿐입니다. 어느 쪽이든 Java 프로그램을 실행하려면 JRE 만 있으면됩니다. 컴파일하려면 JDK가 필요합니다.
Kevin Workman

JDK를 컴파일하기 위해 Tomcat과 같은 서블릿 컨테이너와 JDK, IDE, JDK가 필요한 Java 프로그램은 거의 없습니다. 어떤 종류의 응용 프로그램에 문제가 있습니까?
Arne Burmeister

답변:


159

터미널을 열고 간단히 입력 할 수 있습니다

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"


1
@MaciejCygan, 왜 JAVA_HOME이 JDK 대신 JRE를 가리키고 있습니까?
Pacerier

@Pacerier 왜 ?? 나는 확실히 롤! JDK가 설치되어 있지 않습니까? 윈도우 또는 리눅스를 실행하는 중 ??
Maciej Cygan

@MaciejCygan, 나는 창문을 사용하고 있습니다. 예, JDK도 설치되어 있습니다.
Pacerier

@Pacerier 환경 변수 내에서 찾을 수없는 경우 편집하거나 항목을 작성할 수 있습니다.
Maciej Cygan

@MaciejCygan, Yea, 왜 JAVA_HOME이 JDK 대신 JRE를 가리키고 있습니까?
Pacerier

18

일반적으로 jdk 설치에는 환경 경로 변수에 javac가 있습니다 ... 경로에서 javac를 확인하면 jdk가 설치되어 있음을 나타내는 좋은 지표입니다.


3
OP가 Mac에 대해 묻는 것이기 때문에 Mac과 다를 수 있습니다. 그러나 Windows의 경우이 테스트는 신뢰할 수없는 것 같습니다. 방금 확인 javac했는데 경로가 없지만 jdk가 설치되어 있습니다. (내 경우에는 JAVA_HOME이 C:\Program Files\Java\jdk1.8.0_45
가리킴

네, 그렇습니다. javac가 실제로 % JAVA_HOME % \ bin에 있습니다.
Hamed

6

@ 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"

여기 있습니다!



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

경고 :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

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도 포함되어 있지 javac않습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.