একটি সাধারণ, খাঁটি জাভা সমাধান ..
উইন্ডোজ এবং ম্যাকোসের জন্য, নিম্নলিখিতগুলি বেশিরভাগ সময় অনুমান করা যায় ...
public static boolean isJDK() {
String path = System.getProperty("sun.boot.library.path");
if(path != null && path.contains("jdk")) {
return true;
}
return false;
}
তবে ... লিনাক্স এ এটি নির্ভরযোগ্য নয় ... উদাহরণস্বরূপ ...
- লিনাক্সের অনেক জেআরই
openjdk
পথ রয়েছে contain
- জেআরইতে জেডিকেও নেই এমন কোনও গ্যারান্টি নেই।
সুতরাং আরও কার্যকর ব্যর্থতার পক্ষে 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
মধ্যে জেরির অনুরূপ । উদাহরণস্বরূপ, উপরের কোডটি চালিত হলে ফেডোরার জেডিকে ব্যর্থ হবে (বা আপনি এটি কীভাবে দেখুন তার উপর নির্ভর করে)। আরও তথ্যের জন্য নীচে ইউনিট পরীক্ষা দেখুন ...
ইউনিট পরীক্ষা:
# 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