Dosya sistemi düzeni göz önüne alındığında, Oracle Java JDK 8 kurulumu nasıl çalışır?


2

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)

JDK 7 de Oracle - Sistem Tercihleri
Mark


@Mark, teşekkürler; bu; onlar yapmıyor. @Rene, bağlantı için teşekkür ederiz. O zamandan beri ikisini de buldum /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ı.
Laird Nelson,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.