cacerts
あなたが持っていないJAVA_HOME
か、JRE_HOME
定義していないときに、デフォルトのJavaインストールの場所を取得する方法を探しています。
私はのために、少なくとも機能するソリューションを必要OS X
とLinux
。
はい。java -v
動作すると想定されています:)
回答:
下でのLinuxの場所を見つけるために$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
下では、MAC OS X、検索する$JAVA_HOME
実行します。
/usr/libexec/java_home
cacerts
下にありますHome/lib/security/cacerts
:
$(/usr/libexec/java_home)/lib/security/cacerts
UPDATE(OS XとJDK)
上記のコードは、JDKがインストールされていないコンピューターでテストされました。JDKがインストールされていると、pR0Pが言ったように、
$(/usr/libexec/java_home)/jre/lib/security/cacerts
/usr/libexec/java_home
のreadlink
-basedコマンドとは異なる答えを私に与え、前者は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
~/.sdkman/candidates/java/current/lib/security
/usr/libexec/java_home