Bu naif bir soru değil ; lütfen bana eşlik et.
Birisi bana /usr/bin/java2010 yılının ortalarından itibaren bir Apple MacBook Pro'nun hem Apple JDK hem de Oracle 1.8.0 JDK ile nasıl çağrıldığını ve Oracle 1.8.0 JDK'nın kullanılmasının ve kullanılmasının nasıl sonuçlandığını söyleyebilir mi?
Lütfen Apple tarafından yüklenen JDK 1.6 sürümümün Java Tercihleri uygulamasının onlar tarafından kaldırıldığı kadar yeni olduğunu ve hangi Java VM'nin kullanılacağının belirlenmesini etkilemeyeceğini unutmayın.
Ayrıca /usr/libexec/java_home, aşağıdaki örneklerin hiçbirinde (zaten benim tarafımdan) kullanılmadığını lütfen unutmayın .
Tamam, işte başlıyoruz.
Oracle'ın JDK 1.8'i kuruldu /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/. İnce.
/usr/bin/javaApple kontrolünde olan, işaret eden sembolik bir bağdır /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java. ( (bir dizine) /System/Library/Frameworks/JavaVM.framework/Versions/Currentişaret eden sembolik bir bağdır /System/Library/Frameworks/JavaVM.framework/Versions/A, yani, /usr/bin/javasembolik bağ çözümlemesinin işaret ettiği noktaya göre /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java.)
/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/javaolduğu değil sembolik bir bağ. Bu bir çalıştırılabilir. Son değiştirilen zaman damgası oldukça eski, muhtemelen JDK 7'yi bir süre önce kurduğum zamana denk geliyor . Her durumda, JDK 8'i kurduğum tarihe karşılık gelmiyor.
/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/bin/javaboyut olarak eşit değil /System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java. Bu da sembolik bir bağlantı değildir. Son değiştirilen zaman damgası, JDK 8'i yüklediğim zamana karşılık geliyor.
Bununla birlikte, bu javadeğişkenlerden herhangi birini bir -versionargümanla çağırmak, bunları 1.8 olarak tanımlayan bir sürüm dizgisi oluşturur.
/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/java/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/bin/javaDiğerleri arasında sembolik bir bağlantı olmadığı için ve arasında semantik bağlantı nasıl kurulur ?
İkincisi, kim "sahibi" /System/Library/Frameworks/JavaVM.framework/Versions/A: Oracle veya Apple?
Ayrıca, aşağıdakileri, özellikle program adını argv[0]tanımlayan ayarı /usr/bin/java, hiç yazmamış olmama rağmen (aşağıdaki çıktıdaki satır 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)
/System/Library/Frameworks/JavaVM.framework/Versions/A/Commands/javave belgesiz olarak /usr/libexec/java_homeadlandırılan özel bir çerçeve başlattım JavaLaunching. Koşu stringsüzerinde (!) Basit bir aptal tarama yapar düşündürmektedir ait /Library/Java/JavaVirtualMachinesve sonra en son hangi anlamaya biraz (belgesiz) sezgisel bir yaklaşım kullanır. Çirkin ve şaşırtıcı.