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
않습니다.