Mac OS'nin / usr / libexec / java_home'dan döndürülen varsayılan Java sanal makinesini nasıl değiştirebilirim


108

(Bunun SU'ya devam edip etmeyeceğinden emin değildim ... geçiş kesinlikle bir seçenektir, ancak daha fazla programcı burada soruları okur, işte burada devam eder).

Mac OS X 10.8.4 çalıştırıyorum ve Apple'ın JDK 1.6.0_51'i ve Oracle JDK 1.7.0_25'i kurdum. Yakın zamanda Oracle'ın 1.8 ön izleme JDK'sını, onu gerektiren bazı ön sürüm yazılımları için kurdum. Şimdi, / usr / libexec / java_home komutunu çalıştırdığımda şunu alıyorum:

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (4):
    1.8.0, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    1.7.0_25, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home
    1.6.0_51-b11-457, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_51-b11-457, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

Harika.

Ancak, koşuyor:

$ java -version

İadeler:

java version "1.8.0-ea"

Bu, Java'nın varsayılan sürümünün şu anda bazı "normal" paketleri (benim durumumda, VisualVM) bozan ön sürüm olduğu anlamına gelir.

Ayarlayamıyorum JAVA_HOMEçünkü uygulamaları başlatmak komut satırından başlatılırken bile ortam değişkenlerini yok sayıyor (örn. $ open /Applications/VisualVM.app).

Peki, genel olarak JVM sipariş tercihlerimi ayarlayabileceğim bir dosya var mı?

(Lütfen bana Java Tercihler Panelini başlatmamı söylemeyin çünkü bu işe yaramıyor: yararlı hiçbir şey içermiyor ve yalnızca yüklediğim 4 JVM'den birini listeliyor.)

Güncelleme :

Oracle JVM'ler yaşıyor /Library/Java/JavaVirtualMachines. JDK 1.8 dizininin olarak yeniden adlandırılması jdk1.8.0.jvm.xyzhiçbir şeyi değiştirmez: java_homeyine de doğru yerde bulur ve / usr / bin / java çalıştırmak 1.8 JVM'yi çalıştırmaya devam eder. Bu, senkronizasyon bağlantıları vb. İle ilgili bir sorun değildir.

Benzer Soruların Cevapları

İken bu cevap JAVA_HOME tarafından yakalandı olmaktan Java sürümlerini kaldırmak bir hack ne miktarda teklifler, hala bu soruya cevap vermez nasıl java_home onun varsayılan seçer ve kullanıcıların olup olmadığını olmayan yıkıcı ayarlayın .


'Hangi java' yazın ve kırıntıları takip edin. /usr/bin/javasadece bir sembolik bağlantı
Brian Roach

11
Orada bulundum, bunu yaptım. /usr/bin/javaişaret eder /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java. VersionsDizin 1.8.0 JDK bir sembolik bağlantı içermeyen. Bunun yerine, yararlı olarak işaret Aeden bir dizin içerir Current. A"JAVA_HOME değil. CommandsBir javakomutu olan bir alt dizini var , ancak kim-bilir-neyi yapan opak evrensel bir ikili. java_homeHangi JVM'yi kullanacağına karar vermek için vb. kullandığından şüpheleniyorum .
Christopher Schultz

2
Bu konu dışı ise lütfen kapatmak yerine taşıyın. FWIW, bu "programcılar tarafından yaygın olarak kullanılan yazılım araçları" ile ilgilidir, bu nedenle "konu dışı" seçeneğini kapatmak mantıksızdır.
Christopher Schultz

Evet, bu sinir bozucu! Herkes için sadece bir JDK istiyorum veya belki de 1.7 ile 1.8 arasında kolayca geçiş yapabileceğim 2 tane.
Brian

1
Bu SO cevabını bu soru için yararlı buldum: stackoverflow.com/a/44169445/2987755
dkb

Yanıtlar:


89

Bence JAVA_HOMEyapabileceğinin en iyisi bu. Komut satırı araçları , bu ortam değişkenini sever javave javacbunlara saygı duyar, komut satırı araçlarının Java 7 kullanmasını /usr/libexec/java_home -v '1.7*'sağlamak için size koyabileceğiniz uygun bir değer vermek JAVA_HOMEiçin kullanabilirsiniz.

export JAVA_HOME="`/usr/libexec/java_home -v '1.7*'`"

Ancak standart çift tıklanabilir uygulama paketleri, altında kurulu JDK'leri hiç kullanmaz /Library/Java. .appApple'ın kullanıldığı eski tarz paketler JavaApplicationStubApple Java 6'yı kullanacak /System/Library/Frameworksve AppBundler ile oluşturulmuş yeni stiller , paketlenmiş bir JRE olmadan "genel" JRE girişini kullanacaktır /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home- bu, saplama kodunda sabit kodlanmıştır ve değiştirilemez ve aynı anda iki farklı genel JRE'ye sahip olamazsınız.


Düzenleme: İndirme sayfasından "uygulama paketi" sürümünü kullandığınızı varsayarak ve bu belirli uygulamanın bir AppBundler uygulaması olmadığını, bunun yerine ana yürütülebilir dosyasının bir numara çağıran bir kabuk komut dosyası olduğunu varsayarak, özellikle VisualVM'ye bir göz attım diğer kabuk betikleri ve çeşitli yapılandırma dosyalarını okur. Varsayılan /Library/Javaolarak, 7u10 veya daha sonraki bir sürüm olduğu sürece en yeni JDK'yı seçer veya Java 7 yüklemeniz 9 veya daha önceki bir güncelleme ise Java 6'yı kullanır. Ancak kabuk komut dosyalarındaki mantığı çözmek bana, bir yapılandırma dosyası kullanarak belirli bir JDK belirtebileceğiniz gibi görünüyor.

~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.confSatırı içeren bir metin dosyası oluşturun (1.3.6'yı kullandığınız VisualVM sürümüyle değiştirin)

visualvm_jdkhome="`/usr/libexec/java_home -v '1.7*'`"

ve bu onu 8 yerine Java 7'yi seçmeye zorlayacaktır.


Sistemimde durum böyle görünmüyor. JDK 1.8 kurulmadan önce VisualVM'nin başlatılması çalıştı. JDK1.8'den sonra, VisualVM açılış ekranını gösterir ve ardından ölür. JDK1.8 dizininin / Library / Java dışına taşınması, çalışma yeteneğini geri yükler.
Christopher Schultz

@ChristopherSchultz VisualVM paketinin içine bir göz attım ve bunun normal bir appbundler uygulaması olmadığı ortaya çıktı. Olası bir çözüm için düzenlememe bakın.
Ian Roberts

Üzgünüm, önceki yorumumu düzenlemenizden önce yazdım. VisualVM'nin bu tekniği kullanarak çalışmasını kontrol edeceğim, ancak evrensel olarak uygulanabilir olması pek olası değil. Eclipse, JasperReports iReport, vb. Gibi çalıştırdığım ve bundan etkilenmesi muhtemel bir sürü Java tabanlı yazılımım var. Sanırım JDK1.8 dizinini başka bir yere taşımayı ve gerçekten ihtiyacım olan (birkaç) kez bunu JAVA_HOME ile açıkça kullanmayı tercih ederim.
Christopher Schultz

1
Evet, haklısınız, JAVA_HOMEgitmenin yolu bu ve genel olarak en iyi bahsiniz, diğer durumlarda ihtiyacınız olan küçük sürümü belirlemektir. Demontaj dayanarak, olabildiğince çıkıyor export JAVA_VERSION=1.7yapmaya java_homeyerine JDK8 arasında JKD7 gösteren varsayılan, ama sonları o java_home -v 1.6çünkü java-homenedeniyle karşılıklı olarak kabul edilemezdir kısıtlamalara ek sınırlama olarak yorumlayıp onu ve vazgeçer, o zaman sadece bile varsayılan 1.8 ile gider --failfastseçeneği.
andrewdotn

2
Sistem Tercihleri ​​Java Kontrol Panelinin neden kabuk komut dosyalarına / komutlarına başvurmak yerine yalnızca aralarından seçim yapabileceğiniz bir liste sunmadığını anlayamıyorum. Bunun sadece tarayıcıda çalışan
Applet'ler

51

Ben de orada bulundum ve nasıl /usr/libexec/java_homeçalıştığını her yerde araştırdım, ancak listelediği mevcut Java Sanal Makinelerini nasıl belirlediğine dair herhangi bir bilgi bulamadım.

Biraz deney yaptım ve sanırım basitçe a'yı çalıştırıyor ls /Library/Java/JavaVirtualMachinesve ./<version>/Contents/Info.plistorada bulduğu tüm çalışma zamanlarını inceliyor .

Daha sonra bunları Info.plist'te bulunan anahtara göre azalan sıralar JVMVersionve varsayılan olarak ilk girişi varsayılan JVM olarak kullanır.

Sanırım yapabileceğimiz tek şey sudo vi /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Info.plistplist'i değiştirmek : ve sonra JVMVersion'ı 1.8.0başka bir şeyden değiştirerek onu yukarıdan aşağıya doğru sıralayacak şekilde, örneğin !1.8.0.

Gibi bir şey:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    ...
    <dict>
            ...
            <key>JVMVersion</key>
            <string>!1.8.0</string>   <!-- changed from '1.8.0' to '!1.8.0' -->`

ve sonra sihirli bir şekilde listenin başından kaybolur:

/usr/libexec/java_home -verbose
Matching Java Virtual Machines (3):
    1.7.0_45, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home
    1.7.0_09, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_09.jdk/Contents/Home
    !1.8.0, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home

Şimdi oturumu kapatmanız / oturum açmanız ve ardından:

java -version
java version "1.7.0_45"

:-)

Elbette şimdi başka bir şeyin bozulup bozulmadığını veya java'nın 1.8.0-ea sürümünün hala düzgün çalışıp çalışmadığını bilmiyorum.

Muhtemelen bunların hiçbirini yapmamalısınız, bunun yerine 1.8.0'ı kaldırın.

Ancak şimdiye kadar bu benim için çalıştı.


Bu benim için çalıştı. Idea Sbt eklentisinin benim için MacOS'ta çalışmasını sağlamak için bu ince ayarı kullanmak zorunda kaldım. Blogumun üzerine söz ediyorum agilebuild.blogspot.com/2014/02/...
antoine

Bu işe yarıyor, ancak biraz zor görünüyor ve standart bir operasyon prosedürü gibi görünmeyebilir. Daha iyi bir yaklaşım varsa dolaşırım.
Weibo Li

Yine de bunun için bir çözüm istiyorum, ancak Intellij için JDK'yi kullanmak için bunu zshenv'ime ekledim: export IDEA_JDK = /usr/libexec/java_home -v 1.7. Sanırım aynısını JAVA_HOME için de yapacağım ...
David Resnick

Java 9'u çift tıklama uygulamalarını başlatırken kullanmaktan kaçınmak için bu yanıtı kullanmayı başardım (Keystore Store explorer'daki bir sorun nedeniyle). Teşekkürler!
Nicolas Henneaux

2
MacOS üzerinde JDK ve JRE Kurulumu'ndan bir alıntı : macOS 2012-006 için Java'yı yükledikten sonra, yüklenen /usr/bin/javaen yeni JDK'yı bulacak ve içindeki Java ile ilgili tüm komut satırı araçları için bunu kullanacaktır /usr/bin.
Jeremy Kao

7

Aslında oldukça kolay. Diyelim ki JavaVirtualMachines klasörümüzde bu var:

  • jdk1.7.0_51.jdk
  • jdk1.8.0.jdk

Varsayılanımızın 1.8 olduğunu hayal edin, o zaman yeni bir klasör (örneğin 'eski') ekleyip varsayılan jdk klasörünü bu yeni klasöre taşıdık. Do java -version, ve işte yine 1.7!


1
İnanılmaz, ama işe yaradı ... Teşekkürler Mac OS Mojave
Michał Dobi Dobrzański

5

Kollarınızı sıvamak için sakıncası yoksa oldukça basit ... / Library / Java / Home , JAVA_HOME için varsayılandır ve yalnızca şunlardan birine işaret eden bir bağlantıdır:

  • /System/Library/Java/JavaVirtualMachines/1.?.?.jdk/Contents/Home
  • /Library/Java/JavaVirtualMachines/jdk1.?.?_??.jdk/Contents/Home

Ben JVM / JDK sürümünü benim varsayılan değiştirmek istedim Yani olmadan JAVA_HOME içeriğini değiştirerek ... / bana öyle geliyor ... Kütüphane / Java / Ev akımı JVM / JDK için standart konum olduğuna ve korumak istiyordum en az yan etkiyle işleri değiştirmenin en kolay yolu olmak.

Aslında gerçekten çok basit. Java -version ile gördüğünüz java sürümünü değiştirmek için tek yapmanız gereken bunun bir sürümü:

cd /Library/Java
sudo rm Home
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home ./Home

Zaman ayırmadım, ancak / usr / libexec / java_home ve ln'yi kullanarak yukarıdaki sembolik bağlantıyı yeniden oluşturmak için çok basit bir kabuk betiği oluşturmak aptalca olmalı ...

/ Library / Java / Home'un gösterildiği yeri değiştirdikten sonra ... doğru sonucu alırsınız:

cerebro:~ magneto$ java -version
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM)
64-Bit Server VM (build 25.60-b23, mixed mode)

1
Bu şey böyle çalışmıyor: /Library/Java/Homegerçekten bir sembolik bağ, ancak /System/Library/Frameworks/JavaVM.framework/Homesonunda sizi başlatmak için doğru JRE'yi belirleyen büyülü bir komuta götüren büyük bir sembolik bağlantı karmaşası içinde olduğuna işaret ediyor. /usr/libexec/java_homeBu sihirle de bağlantılı olduğunu unutmayın . Yani, sadece sembolik bağlantıları değiştirip tek bir JRE'yi işaret ederek her şeyi kesintiye uğratabilirsiniz, ancak bunu her seferinde güncellemeniz gerekir. Açıkça görülüyor ki set_preferred_jvm_versionbuna benzer bir komut veya benzeri bir şey yok .
Christopher Schultz

1
Yine de bu tekniğin avantajı, JAVA_HOMEherhangi bir yere ayarlamanızı gerektirmemesidir . Java tabanlı programların "tercih edilen" Java VM ile başlatılmasına neden olup olmayacağını görmek için bu teknikle oynayacağım. Olacağından şüpheleniyorum ama oldukça kırılgan.
Christopher Schultz

Peki bu günlerde bunu sadece .bash_profile:export JAVA_HOME=`/usr/libexec/java_home -v 12`
jrypkahauer

Bu, bir simgeye çift tıklamak için işe yaramaz, bu da esas nokta buydu. Yalnızca komut satırından çalışan çözümler ... çözüm değildir.
Christopher Schultz

3

Oracle'ın Java 7 için kaldırma talimatları benim için çalıştı.

Alıntı:

JDK'yı Kaldırma JDK'yı kaldırmak için Yönetici ayrıcalıklarına sahip olmanız ve kaldırma komutunu kök olarak veya sudo (8) aracını kullanarak yürütmeniz gerekir.

/ Library / Java / JavaVirtualMachines'e gidin ve adı aşağıdaki formatla eşleşen dizini kaldırın: *

/Library/Java/JavaVirtualMachines/jdk<major>.<minor>.<macro[_update]>.jdk

Örneğin, 7u6'yı kaldırmak için:

% rm -rf jdk1.7.0_06.jdk


2
Bu soru kurulum kaldırma ile ilgili değildi ... Yüklü olanlardan "birincil" JVM'yi seçmekle ilgiliydi ...
Christopher Schultz

3

Biraz geç ama bu Mac OSX ile devam eden bir sorun olduğu için ...

Bulduğum en basit çözüm, Apple'ın yüklediği OpenJDK öğelerini kaldırmaktı. Bir Mac OSX güncellemesi geldiğinde, yüklenir ve yeniden kaldırmanız gerekir.

Mac'inizde Java kullanarak Google App Engine için uygulamalar geliştirirseniz, bu gerçekten işe yarar. OpenJDK iyi çalışmıyor ve Mac OSX Yosemite yükseltmesiyle birlikte gelen Java sürümü, her dağıtımda App Engine için Eclipse Eklentisinin çökmesine neden olacak ve şu yararlı bir hata verecektir: "Okuma zaman aşımına uğradı".


1
Komik ... Bu noktada Apple'ın Java'yı tamamen kaldırdığını sanıyordum. Apple'ın Java 1.6 JVM'sini manuel olarak kaldırdığımı hatırlamıyorum ve kesinlikle artık burada değil. Her halükarda, bu, kurulmuş bir seçim verildiğinde tercih edilen JVM'yi belirtmek olan orijinal sorunu gerçekten çözmez.
Christopher Schultz

Haklısın. Soruyu cevaplamıyor. Şuna cevap verir: Kullanılan JVM'yi kaldırırsanız, listedeki 'sonraki' kullanılır. Belki bu yardımcı olur.
Mo'in Creemers

bu, jdk 8 kurulumunun neden JavaVirtualMachines klasöründe görünmediğini açıklıyor mu? Tüm gördüğüm "1.6.0.jdk", hangi sürümü yüklersem kurarım.
whyoz

@whyoz jdk-8u31-macosx-x64'ü osx 10.10.2 üzerine kurdu ve VM beklendiği gibi JavaVirtualMachines klasörüne kuruldu.
Mo'in Creemers

Parallels'i şans eseri mi çalıştırıyorsunuz? Parallels ve 8u31'in Windows tarafına beklendiği gibi yükledim ... sadece Mac tarafında değil ..
whyoz

3

"Jenv" i ve "JAVA_HOME" u ayarlamak gibi diğer şeyleri başarılı olmadan test ettim. Şimdi ben ve aşağıdaki çözümü ile bitiriyorum

function setJava {
    export JAVA_HOME="$(/usr/libexec/java_home -v $1)"
    launchctl setenv JAVA_HOME $JAVA_HOME
    sudo ln -nsf "$(dirname ${JAVA_HOME})/MacOS" /Library/Java/MacOS 
    java -version
}

(~ / .bashrc veya ~ / .bash.profile veya ~ / .zshrc'ye eklendi)

Ve böyle sesleniyor:

setJava 1.8

java_home yanlış girişi halledecektir. yani yanlış bir şey yapamazsınız. Maven ve diğer şeyler şimdi doğru sürümü alacak.


1

Aslında kaynak mevcut olmadığı için demonte makinesinde buna biraz baktım.

/ usr / bin / java ve / usr / libexec / java_home, JavaLaunching.framework kullanır. JAVA_HOME ortam değişkeni gerçekten ilk olarak / usr / bin / java ve arkadaşları tarafından kontrol edilir (ancak / usr / libexec / java_home değil.) Çerçeve, mevcut JVM'leri filtrelemek için JAVA_VERSION ve JAVA_ARCH ortam değişkenlerini kullanır. Yani, varsayılan olarak:

$ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
    11.0.5, x86_64: "Amazon Corretto 11"    /Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home
    1.8.0_232, x86_64:  "Amazon Corretto 8" /Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/amazon-corretto-11.jdk/Contents/Home

Ancak, diyelim ki JAVA_VERSION ayarı varsayılanı geçersiz kılabilir:

$ JAVA_VERSION=1.8 /usr/libexec/java_home
/Library/Java/JavaVirtualMachines/amazon-corretto-8.jdk/Contents/Home

Ayrıca hem / usr / bin / java hem de / usr / libexec / java_home ile arama yolları, bulunan JVM'ler vb. Gibi bazı ek hata ayıklama günlüğünü görmek için JAVA_LAUNCHER_VERBOSE = 1'i ayarlayabilirsiniz.

Geçmişte JavaLaunching.framework, tercih edilen JVM sırasını ayarlamak için tercihler sistemini (com.apple.java.JavaPreferences etki alanı altında) kullandı ve varsayılan JVM'nin PlistBuddy ile ayarlanmasına izin verdi - ancak söyleyebileceğim en iyi şekilde, macOS'in son sürümlerinde kod kaldırılmıştır. Ortam değişkenleri tek yol gibi görünüyor (JDK paketlerindeki Info.plist'i düzenlemenin dışında).

Varsayılan ortam değişkenlerini ayarlamak, tabii ki .profiliniz aracılığıyla veya bir oturum düzeyinde ayarlanmaları gerekiyorsa launchd aracılığıyla yapılabilir .


Bu harika bir bilgi, Dan. Kullanmak .profile, benim kullanım durumum için yararlı değil (örneğin, launchpad'den bir uygulamayı başlatmak), ancak ipucu launchdiyi bir ipucu . Java'nın son sürüm çılgınlığı, çeşitli düzeylerde (kişisel) güvene sahip birkaç Java neslini aynı anda yüklediğim anlamına geldiğinden, bunu bir denemem gerekecek.
Christopher Schultz

-2

Düzenleme: Bu bilgiler, başka herhangi bir java uygulaması için değil, özellikle visualvm içindir

Başkalarının da bahsettiği gibi, visualvm.conf'u değiştirmeniz gerekir

Mac'te JvisualVM 1.3.6'nın en son sürümü için yükleme dizinleri değişmiştir.

Şu anda /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf içindedir. .

Ancak bu, VisualVM'yi nereye kurduğunuza bağlı olabilir. VisualVM'nizin nerede başlatıldığını bulmanın en kolay yolu ve ardından aşağıdakileri kullanarak işleme bakın:

ps -ef | grep VisualVM

Şöyle bir şey göreceksiniz:

... -Dnetbeans.dirs = / Applications / VisualVM.app / Contents / Resources / visualvm / visualvm ...

Netbeans.dir özelliğini alıp bir dizine bakmak istiyorsunuz ve etc klasörünü bulacaksınız.

Visualvm.conf dosyasındaki bu satırın açıklamasını kaldırın ve jdk'ye giden yolu değiştirin

visualvm_jdkhome="/path/to/jdk"

Ek olarak, görsel sanal makinenizde yavaşlık yaşıyorsanız ve çok fazla belleğiniz varsa, mevcut bellek miktarını büyük ölçüde artırmanızı ve sunucu modunda çalıştırmanızı öneririm:

visualvm_default_options="-J-XX:MaxPermSize=96m -J-Xmx2048m -J-Xms2048m -J-server -J-XX:+UseCompressedOops -J-XX:+UseConcMarkSweepGC -J-XX:+UseParNewGC -J-XX:NewRatio=2 -J-Dnetbeans.accept_license_class=com.sun.tools.visualvm.modules.startup.AcceptLicense -J-Dsun.jvmstat.perdata.syncWaitMs=10000 -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.d3d=false"

Kötü tavsiye: belirli bir uygulama için başlangıç komut dosyası değiştirerek muhtemel uygulamayı kıracak ve OS için varsayılan JVM değişen özgün sorunu çözmez.
Christopher Schultz

Ne yazık ki, başkalarının da bahsettiği gibi, jvisualvm bir jvm seçmek için standart yöntemler kullanmaz. Bu, bu uygulama için tek çözümdür.
Celandro

Ben devlet olarak benim cevap sizin kendisi bohça uygulama içinde herhangi bir şey değiştirmek gerekmez, uygulama yapılandırmasını yükleyebilirsiniz ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf.
Ian Roberts

-2

Benzer bir durum yaşadım ve aşağıdaki süreç benim için çalıştı:

  1. Terminalde yazın

    vi ~/.profile
  2. Sonra bu satırı dosyaya ekleyin ve kaydedin

    export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

    1.7.0_25 gibi, bilgisayarınızda bulunan sürüm

  3. Düzenleyiciden çıkın, ardından aşağıdaki komutu yazın ve etkili olmasını sağlayın

    source ~/.profile 

Ardından sonucu kontrol etmek için java -version yazın

    java -version 

.Profile nedir? From: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

.profile dosyası gizli bir dosyadır. Profil dosyası olan kullanıcı giriş yaptığında sisteme hangi komutların çalıştırılacağını söyleyen isteğe bağlı bir dosyadır. Örneğin kullanıcı adım bruno ise ve / Users / bruno / içinde bir .profile dosyası varsa, tüm içeriği oturum açma prosedürü sırasında yürütülecektir.


Bu, VisualVM'yi Launchpad'den başlatırken çalışmayacaktır. JAVA_HOME ortam değişkenini ayarlayabileceğiniz için komut satırından başlatmak asla sorun değildir.
Christopher Schultz

-2

MacOS, mevcut Java Sürümünü bulmak için / usr / libexec / java_home kullanır. Atlamanın bir yolu, yukarıda @ void256 tarafından açıklandığı gibi plist dosyasını değiştirmektir. Diğer yollar, java_home'un yedeğini almak ve onu,
echo $ JAVA_HOME koduna sahip kendi java_home betiğinizle değiştirmektir.

Şimdi aşağıdaki komutları ~ / .bash_profile dosyasına ekleyerek JAVA_HOME'u istenen SDK sürümüne aktarın. dışa aktar JAVA_HOME = "/ Sistem / Kitaplık / Java / JavaVirtualMachines / 1.6.0.jdk / İçindekiler / Ana Sayfa" launchctl setenv JAVA_HOME $ JAVA_HOME /// Ortam değişkenini global yap

Yukarıdaki komutları çalıştırmak için ~ / .bash_profile komutunu çalıştırın.

JAVA_HOME'un değiştirilmesi gerektiğinde, ~ / .bash_profile dosyasındaki JAVA_HOME değerini sıfırlayabilir.


Ortam değişkenlerine dayanan hiçbir şey çalışmayacaktır. Buradaki nokta, LaunchPad vb. Aracılığıyla başlatılan uygulamaların bu ortam kurulumuna sahip olmamasıdır. Yukarıdaki plist hacklemesi, aslında istenen sonucu elde etmesi açısından "en iyi" gibi görünüyor. Henüz herhangi bir dezavantajdan emin değilim. Aynı soruna sahip olan @Tony'nin cevabına bakın.
Christopher Schultz

-3

Varsayılan java sürüm formunu 1.6 * ile 1.7 * olarak değiştirmek istedim. Aşağıdaki adımları denedim ve benim için çalıştı:

  • / Usr / bin altından "java" bağlantısı kaldırıldı
  • Yeniden oluşturuldu ve yeni konuma işaret edildi:

ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/bin/java java

  • "java sürümü" ile doğrulandı

java "1.7.0_51" sürümü
Java (TM) SE Runtime Environment (derleme 1.7.0_51-b13)
Java HotSpot (TM) 64-Bit Sunucu VM (derleme 24.51-b03, karma mod)


Soruya cevap vermiyor: davranışını etkilemeyecek /usr/libexec/java_home.
Christopher Schultz
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.