sourcecode

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

copyscript 2022. 9. 14. 22:23
반응형

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

시스템에 Java가 설치되어 있는지 확실하지 않은 경우find말미에

예.find / -name "java"

보통 jdk 설치의 환경 경로 변수에는 javac이 포함되어 있습니다.따라서 경로에서 javac을 체크하면 jdk가 설치되어 있는 것을 알 수 있습니다.

@maciej-cygan은 프로세스를 잘 설명했지만 Java 경로를 찾으려면 다음과 같이 하십시오.

$ which java

그것은 당신에게 의 길을 준다.java링크된 파일인 바이너리 파일/usr/bin디렉토리로 이동합니다.다음:

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

(나에게는) 다음과 같은 위치를 찾아라:

여기에 이미지 설명 입력 그럼cdJava의 실제 홈디렉토리를 검색하려면 , 다음의 순서에 따릅니다.

$ ls -la | grep java

이 경우 다음과 같습니다.

여기에 이미지 설명 입력

스크린샷에 나와 있듯이 자바 홈디렉토리는/usr/lib/jvm/java-11-openjdk-amd64따라서 JAVA를 추가해야 합니다.내 bash 프로파일의 홈(.bashrc,.bash_profile(OS에 따라 다름) 다음과 같습니다.

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

여기예요.

범용적이고 순수한 자바 솔루션..

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도 포함되어 있지 않다는 보장은 없습니다.

따라서 보다 안전한 접근법은 Fail Safe의 존재 여부를 확인하는 것입니다.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.pathJRE와 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

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가 설치되어 있습니다.

문제의 컴퓨터는 맥이다.

MacOS 전용 솔루션:

/usr/libexec/java_home -v 1.8+ --exec javac -version

서 ★★★★★1.8+Java 1.8 후 java java java 。

도 ★★★★★★★★★★★★★★★★★.java_home코드를 하지 않기 등)이 필요합니다.2>&1 |grep -v "Unable"는 로케일에 는 로케일에 따라 다릅니다.

는 "Java"에도 할 수 /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin 이 쓸 때, 되어 에는 「JRE」가 포함되어 있지 javac뿐만 아니라.

언급URL : https://stackoverflow.com/questions/22539779/how-to-tell-if-jre-or-jdk-is-installed

반응형