내가 cacerts
가지고 있지 JAVA_HOME
않거나 JRE_HOME
정의 하지 않았을 때 기본 Java 설치 위치를 얻는 방법을 찾고 있습니다 .
최소한 OS X
및 에서 작동하는 솔루션이 필요합니다 Linux
.
예. java -v
작동하는 것으로 간주됩니다 🙂
답변
에서 리눅스 의 위치를 찾을 수 있습니다 $JAVA_HOME
:
readlink -f /usr/bin/java | sed "s:bin/java::"
은 cacerts
아래에 있습니다 lib/security/cacerts
:
$(readlink -f /usr/bin/java | sed "s:bin/java::")lib/security/cacerts
에서 맥 OS X , 찾아 $JAVA_HOME
실행 :
/usr/libexec/java_home
은 cacerts
아래에 있습니다 Home/lib/security/cacerts
:
$(/usr/libexec/java_home)/lib/security/cacerts
업데이트 (JDK가있는 OS X)
위 코드는 JDK가 설치되지 않은 컴퓨터에서 테스트되었습니다. JDK 설치와 함께, pR0Ps 말했듯이 , 그것에서이다
$(/usr/libexec/java_home)/jre/lib/security/cacerts
답변
OS X 10.10.1 (Yosemite)부터 cacerts
파일 위치가 다음과 같이 변경되었습니다.
$(/usr/libexec/java_home)/jre/lib/security/cacerts
답변
이러한 인증서에 프로그래밍 방식으로 액세스해야하는 경우 파일을 전혀 사용하지 않고 신뢰 관리자를 통해 액세스하는 것이 가장 좋습니다. 다음 코드는 OpenJDK 테스트 케이스 에서 가져온 것입니다 (빌드 된 cacerts 컬렉션이 비어 있지 않은지 확인).
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance("PKIX");
trustManagerFactory.init((KeyStore) null);
TrustManager[] trustManagers =
trustManagerFactory.getTrustManagers();
X509TrustManager trustManager =
(X509TrustManager) trustManagers[0];
X509Certificate[] acceptedIssuers =
trustManager.getAcceptedIssuers();
따라서 파일 위치 나 키 저장소 암호를 처리 할 필요가 없습니다.
답변
MacOS Mojave에서 위치는 다음과 같습니다.
/Library/Java/JavaVirtualMachines/jdk1.8.0_192.jdk/Contents/Home/jre/lib/security/cacerts
sdkman을 사용하여 Java 버전을 관리하는 경우 cacerts는
~/.sdkman/candidates/java/current/jre/lib/security
답변
High Sierra에서 cacerts 는 다음 위치에 있습니다./Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/security/cacerts
답변
readlink -f ” which java
“를 참조 할 수도 있습니다 . 그러나 모든 바이너리 래퍼에서 작동하지 않을 수 있습니다. 실제로 Java 클래스를 시작하는 것이 가장 좋습니다.