意図的にJDKをインストールしたコンピュータが1台あります。特にテスト用に、JREを備えた別のコンピュータを持っています。しかし、このコンピューターでJavaアプリケーションを動作させて別のコンピューターで試したところ、JDKが必要であると不満がありました。JDKが何らかの方法でシステムにインストールされているかどうかを確認するにはどうすればよいですか?注:問題のコンピューターはMacです。
意図的にJDKをインストールしたコンピュータが1台あります。特にテスト用に、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がインストールされていることを示しています。
javac
したところ、パスにありませんが、jdkがインストールされています。(私の場合、私のJAVA_HOMEはを指していますC:\Program Files\Java\jdk1.8.0_45
)
@ 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
です。したがって.bashrc
、.bash_profile
以下のように、JAVA_HOMEをbashプロファイル(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ではこれはそれほど信頼できません...例えば...
openjdk
はパスが含まれていますしたがって、より安全な方法は、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
、これを書いている時点では、そこにインストールされjavac
ているJREも認識していません。