अपने फाइलसिस्टम लेआउट को देखते हुए, Oracle Java JDK 8 इंस्टॉलेशन कैसे काम करता है?


2

यह कोई भोला सवाल नहीं है; कृपया मेरा साथ दें।

क्या कोई मुझे बता सकता है कि /usr/bin/javaApple JDK और Oracle 1.8.0 JDK दोनों के साथ Apple MacBook Pro पर 2010 में Oracle 1.8.0 JDK में परिणाम कैसे मिले और इस्तेमाल किया जा रहा है?

कृपया ध्यान दें कि Apple द्वारा स्थापित JDK 1.6 का मेरा संस्करण हाल ही में पर्याप्त है कि जावा प्राथमिकताएं एप्लिकेशन उनके द्वारा हटा दी गई हैं, ताकि जावा वीएम का उपयोग करने के निर्धारण में कोई कारक न हो।

इसके अलावा कृपया ध्यान दें कि /usr/libexec/java_homeनीचे मेरे किसी भी उदाहरण में (मेरे द्वारा, वैसे भी) आह्वान नहीं किया गया है।

ठीक है चले हम।

Oracle का JDK 1.8 में स्थापित हो जाता है /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/। ठीक।

/usr/bin/java, जो कि Apple के नियंत्रण में है, एक सांकेतिक लिंक है जो इंगित करता है /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java। ( /System/Library/Frameworks/JavaVM.framework/Versions/Currentएक सांकेतिक लिंक /System/Library/Frameworks/JavaVM.framework/Versions/A(निर्देशिका) की ओर इशारा करता है , इसलिए, विस्तार से, /usr/bin/javaप्रतीकात्मक लिंक संकल्प बिंदुओं के बाद /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java)।

/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/javaहै एक प्रतीकात्मक कड़ी। यह एक निष्पादन योग्य है। इसका अंतिम संशोधित टाइमस्टैम्प काफी पुराना है, संभवत: जब मैंने कुछ समय पहले JDK 7 स्थापित किया था। किसी भी घटना में, यह उस तारीख के अनुरूप नहीं है जिस पर मैंने जेडीके 8 स्थापित किया था।

/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/bin/javaके आकार के बराबर नहीं है /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java। यह प्रतीकात्मक लिंक भी नहीं है। इसका अंतिम संशोधित टाइमस्टैम्प जब मैं JDK 8 स्थापित करता है, तब से मेल खाती है। ये दोनों अलग-अलग कार्यक्रम हैं।

फिर भी, इन दोनों में से किसी भी javaसंस्करण को एक -versionतर्क के साथ लागू करने से एक संस्करण स्ट्रिंग प्राप्त होता है जो उन्हें 1.8 के रूप में पहचानता है।

शब्दार्थ लिंक को कैसे /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/javaऔर के बीच स्थापित किया/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/bin/java गया है, यह देखते हुए कि न तो दूसरे के लिए एक प्रतीकात्मक लिंक है?

दूसरे, कौन "मालिक" /System/Library/Frameworks/JavaVM.framework/Versions/A: ओरेकल या एप्पल?

इसके अलावा, निम्नलिखित आउटपुट पर विचार करें, विशेष रूप से प्रोग्राम नाम के रूप में argv[0]पहचान करने वाली सेटिंग /usr/bin/java, भले ही मैंने कभी टाइप न किया हो (पंक्ति 13 नीचे दिए गए आउटपुट में:

Laird-Nelsons-MacBook-Pro:repository ljnelson$ env _JAVA_LAUNCHER_DEBUG=true /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java -version
----_JAVA_LAUNCHER_DEBUG----
Launcher state:
    debug:on
    javargs:off
    program name:java
    launcher name:java
    javaw:off
    fullversion:1.8.0-b132
    dotversion:1.8
    ergo_policy:DEFAULT_ERGONOMICS_POLICY
Command line args:
argv[0] = /usr/bin/java
argv[1] = -version
JRE path is /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre
jvm.cfg[0] = ->-server<-
jvm.cfg[1] = ->-client<-
69 micro seconds to parse jvm.cfg
Default VM: server
Does `/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/server/libjvm.dylib' exist ... yes.
----_JAVA_LAUNCHER_DEBUG----
Launcher state:
    debug:on
    javargs:off
    program name:java
    launcher name:java
    javaw:off
    fullversion:1.8.0-b132
    dotversion:1.8
    ergo_policy:DEFAULT_ERGONOMICS_POLICY
Command line args:
argv[0] = /usr/bin/java
argv[1] = -version
JRE path is /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre
jvm.cfg[0] = ->-server<-
jvm.cfg[1] = ->-client<-
33 micro seconds to parse jvm.cfg
Default VM: server
Does `/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/server/libjvm.dylib' exist ... yes.
JVM path is /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home/jre/lib/server/libjvm.dylib
2242 micro seconds to LoadJavaVM
JavaVM args:
    version 0x00010002, ignoreUnrecognized is JNI_FALSE, nOptions is 4
    option[ 0] = '-Dsun.java.launcher.diag=true'
    option[ 1] = '-Dsun.java.launcher.diag=true'
    option[ 2] = '-Djava.class.path=.'
    option[ 3] = '-Dsun.java.launcher=SUN_STANDARD'
Picked up _JAVA_OPTIONS: -Dfile.encoding=UTF-8
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)

JDK 7 ओरेकल भी है - मुझे संदेह है कि उन्होंने सिस्टम प्रेफरेंस में एक कॉन्फिगरेशन सेट को पढ़ा
मार्क


@ मर्क, धन्यवाद; यह है; वे नहीं। @ रेने, क्रॉस-लिंक के लिए धन्यवाद। मैं के बाद से दोनों कि मिल गया है /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/javaऔर /usr/libexec/java_homeएक निजी रूपरेखा बुलाया लागू अंत JavaLaunchingहै, जो undocumented है। इस पर दौड़ने stringsसे पता चलता है कि यह एक साधारण बेवकूफ स्कैन (!) /Library/Java/JavaVirtualMachinesकरता है और फिर कुछ (अनिर्दिष्ट) अनुमानी का उपयोग करता है जो सबसे हाल का है। कुरूप और आश्चर्य।
लैयर्ड नेल्सन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.