Bagaimana cara mengubah Java VM default Mac OS yang dikembalikan dari / usr / libexec / java_home


108

(Tidak yakin apakah ini harus berjalan di SU ... migrasi tentu saja merupakan pilihan, tetapi lebih banyak pemrogram membaca pertanyaan di sini, jadi begini).

Saya menjalankan Mac OS X 10.8.4, dan saya telah menginstal JDK 1.6.0_51 Apple serta JDK 1.7.0_25 Oracle. Saya baru-baru ini menginstal JDK pratinjau 1.8 Oracle untuk beberapa perangkat lunak pra-rilis yang membutuhkannya. Sekarang, ketika saya menjalankan / usr / libexec / java_home, saya mendapatkan ini:

$ /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

Bagus.

Namun, menjalankan:

$ java -version

Pengembalian:

java version "1.8.0-ea"

Itu berarti bahwa versi default Java saat ini adalah versi pra-rilis, yang merusak beberapa paket "normal" (dalam kasus saya, VisualVM).

Saya tidak dapat menyetel JAVA_HOMEkarena meluncurkan aplikasi mengabaikan variabel lingkungan, bahkan saat meluncurkan dari baris perintah (misalnya $ open /Applications/VisualVM.app).

Jadi, apakah ada file yang dapat saya edit di mana saya dapat mengatur preferensi pemesanan JVM saya secara global ?

(Tolong jangan beri tahu saya untuk meluncurkan Panel Preferensi Java karena itu tidak berfungsi: tidak berisi sesuatu yang berguna dan hanya mencantumkan salah satu dari 4 JVM yang telah saya instal.)

Pembaruan :

Oracle JVM tersedia /Library/Java/JavaVirtualMachines. Penamaan ulang direktori JDK 1.8 jdk1.8.0.jvm.xyztidak mengubah apa pun: java_homemasih menemukannya di tempat yang benar, dan menjalankan / usr / bin / java masih mengeksekusi 1.8 JVM. Ini bukan masalah dengan tautan sinkronisasi, dll.

Jawaban untuk Pertanyaan Serupa

Meskipun jawaban ini menawarkan jumlah peretasan yang akan menghapus versi Java agar tidak diambil oleh java_home, jawaban ini masih tidak menjawab pertanyaan tentang bagaimana java_home memilih defaultnya dan apakah pengguna dapat mengaturnya secara non-destruktif atau tidak .


Ketik 'which java' dan ikuti breadcrumbs. /usr/bin/javahanya symlink
Brian Roach

11
Berada di sana, lakukan itu. /usr/bin/javamenunjuk ke /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java. The Versionsdirektori tidak berisi symlink ke 1.8.0 JDK. Sebaliknya, berisi direktori membantu disebut Ayang Currentmenunjuk ke. Abukan "JAVA_HOME. Ia memiliki subdirektori bernama Commandsyang memang memiliki javaperintah, tetapi ini adalah biner universal buram yang melakukan siapa-tahu-apa. Saya curiga ia menggunakan java_home, dll. untuk memutuskan JVM mana yang akan digunakan.
Christopher Schultz

2
Jika ini di luar topik, silakan bermigrasi alih-alih menutup. FWIW, ini tentang "perangkat lunak yang biasa digunakan oleh pemrogram" jadi menutup "di luar topik" tidak jujur.
Christopher Schultz

Ya, ini membuat frustrasi! Saya hanya ingin satu JDK untuk semua, atau mungkin 2 yang dapat saya alihkan antara 1,7 dan 1,8 dengan mudah.
Brian

1
Saya menemukan jawaban SO ini berguna untuk pertanyaan ini: stackoverflow.com/a/44169445/2987755
dkb

Jawaban:


89

Saya pikir JAVA_HOMEitu yang terbaik yang bisa Anda lakukan. Alat baris perintah menyukai javadan javacakan menghormati variabel lingkungan itu, Anda dapat menggunakan /usr/libexec/java_home -v '1.7*'untuk memberi Anda nilai yang sesuai untuk dimasukkan JAVA_HOMEagar alat baris perintah menggunakan Java 7.

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

Tetapi bundel aplikasi standar yang dapat diklik dua kali tidak menggunakan JDK yang diinstal /Library/Javasama sekali. .appBundel gaya lama yang menggunakan Apple JavaApplicationStubakan menggunakan Apple Java 6 dari /System/Library/Frameworks, dan bundel gaya baru yang dibuat dengan AppBundler tanpa JRE yang dibundel akan menggunakan JRE "publik" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home- yang di-hardcode dalam kode rintisan dan tidak dapat diubah, dan Anda tidak dapat menginstal dua JRE publik yang berbeda pada saat yang sama.


Sunting: Saya telah melihat VisualVM secara khusus, dengan asumsi Anda menggunakan versi "bundel aplikasi" dari halaman unduhan , dan aplikasi khusus ini bukan aplikasi AppBundler, sebaliknya yang dapat dieksekusi utamanya adalah skrip shell yang memanggil nomor skrip shell lainnya dan membaca berbagai file konfigurasi. Secara default memilih JDK terbaru /Library/Javaselama 7u10 atau yang lebih baru, atau menggunakan Java 6 jika penginstalan Java 7 Anda diperbarui 9 atau lebih lama. Tetapi mengungkap logika dalam skrip shell, menurut saya Anda dapat menentukan JDK tertentu menggunakan file konfigurasi.

Buat file teks ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf(ganti 1.3.6 dengan versi VisualVM apa pun yang Anda gunakan) yang berisi baris

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

dan ini akan memaksanya untuk memilih Java 7, bukan 8.


Ini tampaknya tidak terjadi di sistem saya. Peluncuran VisualVM sebelum JDK 1.8 diinstal bekerja. Setelah JDK1.8, VisualVM menampilkan layar splash, lalu mati. Memindahkan direktori JDK1.8 dari / Library / Java memulihkan kemampuannya untuk berjalan.
Christopher Schultz

@ChristopherSchultz Saya telah melihat ke dalam bundel VisualVM dan ternyata itu bukan aplikasi appbundler biasa. Lihat hasil edit saya untuk solusi yang mungkin.
Ian Roberts

Maaf, saya menulis komentar saya sebelumnya sebelum Anda mengedit. Saya akan memeriksa untuk menjalankan VisualVM menggunakan teknik itu, tetapi tidak mungkin dapat diterapkan secara universal. Saya memiliki banyak perangkat lunak berbasis Java lainnya yang saya jalankan juga seperti Eclipse, JasperReports iReport, dll. Yang semuanya mungkin terpengaruh oleh ini. Saya pikir saya lebih suka memindahkan direktori JDK1.8 ke tempat lain dan menggunakannya secara eksplisit dengan JAVA_HOME untuk (beberapa) kali saya benar-benar membutuhkannya.
Christopher Schultz

1
Yup, Anda benar, JAVA_HOMEadalah cara yang harus dilakukan dan secara umum taruhan terbaik Anda adalah menentukan versi minor yang Anda butuhkan dalam kasus lain. Berdasarkan pembongkaran, ternyata Anda dapat export JAVA_VERSION=1.7membuat java_homedefault untuk menampilkan JKD7 bukan JDK8, tetapi itu rusak java_home -v 1.6karena java-homemenafsirkannya sebagai kendala tambahan dan menyerah karena kendala yang sama-sama tidak memuaskan, kemudian hanya pergi dengan default 1.8 bahkan dengan --failfastopsi.
andrewdotn

2
Saya tidak dapat memahami mengapa System Preferences Java Control Panel tidak hanya menampilkan daftar untuk dipilih, daripada harus menggunakan skrip / perintah shell. Saya menduga ini hanya untuk Applet yang berjalan di browser ...
JGFMK

51

Saya juga pernah ke sana dan mencari di mana-mana cara /usr/libexec/java_homekerjanya, tetapi saya tidak dapat menemukan informasi apa pun tentang cara menentukan Java Virtual Machine yang tersedia dalam daftar.

Saya telah bereksperimen sedikit dan saya pikir itu hanya mengeksekusi ls /Library/Java/JavaVirtualMachinesdan kemudian memeriksa ./<version>/Contents/Info.plistsemua runtime yang ditemukan di sana.

Ini kemudian mengurutkan mereka secara turun menurut kunci yang JVMVersionterdapat dalam Info.plist dan secara default menggunakan entri pertama sebagai JVM default-nya.

Saya pikir satu-satunya hal yang mungkin kita lakukan adalah mengubah plist: sudo vi /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Info.plistdan kemudian memodifikasi JVMVersion dari 1.8.0sesuatu yang lain yang membuatnya mengurutkannya ke bawah dan bukan ke atas, seperti !1.8.0.

Sesuatu seperti:

<?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' -->`

dan kemudian secara ajaib menghilang dari daftar teratas:

/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

Sekarang Anda harus keluar / masuk dan kemudian:

java -version
java version "1.7.0_45"

:-)

Tentu saja saya tidak tahu apakah ada hal lain yang rusak sekarang atau jika Java versi 1.8.0-ea masih berfungsi dengan benar.

Anda mungkin sebaiknya tidak melakukan semua ini, tetapi cukup deinstal 1.8.0.

Namun sejauh ini ini berhasil untuk saya.


Ini berhasil untuk saya. Saya harus menggunakan tweak ini agar plugin Idea Sbt tetap berfungsi untuk saya di MacOS. Saya menyebutkannya di blog saya agilebuild.blogspot.com/2014/02/…
antoine

Ini berfungsi tetapi tampaknya sedikit rumit dan mungkin tidak terlihat seperti prosedur operasi standar. Saya mengembara jika ada pendekatan yang lebih baik.
Weibo Li

Saya masih menginginkan solusi untuk ini, tetapi untuk mengatur JDK untuk Intellij untuk digunakan, saya menambahkan ini ke zshenv saya: export IDEA_JDK = /usr/libexec/java_home -v 1.7. Saya rasa saya akan melakukan hal yang sama untuk JAVA_HOME ...
David Resnick

Saya berhasil menggunakan jawaban ini untuk menghindari penggunaan Java 9 meluncurkan aplikasi klik dua kali (karena masalah di penjelajah Keystore Store). Terima kasih!
Nicolas Henneaux

2
Kutipan dari Instalasi JDK dan JRE pada macOS : Setelah menginstal Java untuk macOS 2012-006, /usr/bin/javaakan menemukan JDK terbaru yang diinstal, dan akan menggunakannya untuk semua alat baris perintah terkait Java di /usr/bin.
Jeremy Kao

7

Sebenarnya cukup mudah. Katakanlah kita memiliki ini di folder JavaVirtualMachines kita:

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

Bayangkan 1.8 adalah default kami, lalu kami hanya menambahkan folder baru (misalnya 'lama') dan memindahkan folder jdk default ke folder baru tersebut. Lakukan java -versionlagi et voila, 1.7!


1
Luar biasa, tapi berhasil ... Terima kasih Mac OS Mojave
Michał Dobi Dobrzański

5

Ini cukup sederhana, jika Anda tidak keberatan menyingsingkan lengan baju Anda ... / Library / Java / Home adalah default untuk JAVA_HOME, dan itu hanya tautan yang mengarah ke salah satu dari:

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

Jadi saya ingin mengubah versi JVM / JDK default saya tanpa mengubah konten JAVA_HOME ... / Library / Java / Home adalah lokasi standar untuk JVM / JDK saat ini dan itulah yang ingin saya pertahankan ... menurut saya menjadi cara termudah untuk mengubah hal-hal dengan efek samping paling sedikit.

Sebenarnya sangat sederhana. Untuk mengubah versi java mana yang Anda lihat dengan java -version, yang harus Anda lakukan adalah beberapa versi ini:

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

Saya belum meluangkan waktu tetapi skrip shell yang sangat sederhana yang menggunakan / usr / libexec / java_home dan ln untuk memasang kembali symlink di atas seharusnya sangat mudah dibuat ...

Setelah Anda mengubah tempat / Library / Java / Home diarahkan ... Anda mendapatkan hasil yang benar:

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
Ini bukan cara kerja hal ini: /Library/Java/Homememang symlink, tetapi menunjuk ke /System/Library/Frameworks/JavaVM.framework/Homemana itu sendiri berada dalam tumpukan besar symlink yang akhirnya membawa Anda ke ... perintah ajaib yang menentukan JRE yang tepat untuk diluncurkan. Perhatikan bahwa itu /usr/libexec/java_homejuga terkait dengan keajaiban ini. Jadi, Anda dapat menghentikan semuanya hanya dengan mengganti symlink dan menunjuk ke satu JRE, tetapi Anda harus memperbaruinya setiap saat. Jelas tidak ada perintah seperti set_preferred_jvm_versionatau yang serupa.
Christopher Schultz

1
Keuntungan dari teknik ini, bagaimanapun, adalah bahwa Anda tidak perlu mengaturnya di JAVA_HOMEmana pun. Saya akan bermain dengan teknik ini untuk melihat apakah itu akan menghasilkan program berbasis Java yang diluncurkan dengan Java VM yang "disukai". Saya menduga itu akan terjadi, tetapi cukup rapuh.
Christopher Schultz

Nah hari ini saya hanya memiliki ini di .bash_profile:export JAVA_HOME=`/usr/libexec/java_home -v 12`
jrypkahauer

Ini tidak berfungsi untuk mengklik dua kali pada ikon, yang merupakan intinya. Solusi yang hanya bekerja dari baris perintah adalah ... bukan solusi.
Christopher Schultz

3

Instruksi penghapusan instalan Oracle untuk Java 7 berfungsi untuk saya.

Kutipan:

Menghapus Instalasi JDK Untuk menghapus instalasi JDK, Anda harus memiliki hak Administrator dan menjalankan perintah hapus baik sebagai root atau dengan menggunakan alat sudo (8).

Arahkan ke / Library / Java / JavaVirtualMachines dan hapus direktori yang namanya sesuai dengan format berikut: *

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

Misalnya, untuk menghapus instalasi 7u6:

% rm -rf jdk1.7.0_06.jdk


2
Pertanyaan ini bukan tentang un-instal ... ini tentang memilih JVM "primer" dari yang telah diinstal ...
Christopher Schultz

3

Agak terlambat tetapi karena ini adalah masalah yang sedang berlangsung dengan Mac OSX ...

Solusi paling sederhana yang saya temukan adalah menghapus hal-hal OpenJDK yang diinstal Apple. Setiap kali pembaruan Mac OSX tiba, pembaruan akan diinstal dan Anda harus menghapusnya lagi.

Ini bekerja dengan sangat baik jika Anda mengembangkan aplikasi untuk Google App Engine di mac Anda menggunakan Java. OpenJDK tidak bekerja dengan baik dan versi Java yang disertakan dengan upgrade Mac OSX Yosemite akan membuat Eclipse Plug-in untuk App Engine mogok pada setiap penerapan dengan kesalahan yang membantu: "Waktu baca habis".


1
Lucu ... Saya pikir Apple telah menghapus Java sama sekali pada saat ini. Saya tidak ingat secara manual menghapus Java 1.6 JVM Apple, dan sudah pasti sudah tidak ada lagi. Bagaimanapun, ini tidak benar-benar memperbaiki masalah asli yang menentukan JVM pilihan yang diberikan pilihan yang telah diinstal.
Christopher Schultz

Anda benar. Itu tidak menjawab pertanyaan itu. Itu menjawab ini: Jika Anda menghapus JVM yang sedang digunakan, yang 'berikutnya' dalam daftar akan digunakan. Mungkin itu membantu.
Mo'in Creemers

apakah ini menjelaskan mengapa setelah menjalankan instalasi jdk 8, itu tidak muncul di folder JavaVirtualMachines? Yang saya lihat hanyalah "1.6.0.jdk" apa pun versi yang saya instal.
whyoz

@whyoz Baru saja menginstal jdk-8u31-macosx-x64 di osx 10.10.2 dan VM telah diinstal di folder JavaVirtualMachines seperti yang diharapkan.
Mo'in Creemers

Apakah Anda menjalankan Parallels secara kebetulan? Saya menginstalnya di sisi Windows Parallels dan 8u31 diinstal seperti yang diharapkan..tidak hanya di sisi Mac ..
whyoz

3

Saya menguji "jenv" dan hal-hal lain seperti menyetel "JAVA_HOME" tidak berhasil. Sekarang saya dan akhiri dengan solusi berikut

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
}

(ditambahkan ke ~ / .bashrc atau ~ / .bash.profile atau ~ / .zshrc)

Dan memanggil seperti itu:

setJava 1.8

java_home akan menangani masukan yang salah. jadi kamu tidak bisa melakukan sesuatu yang salah. Maven dan lainnya akan memilih versi yang benar sekarang.


1

Saya sebenarnya melihat ini sedikit di pembongkaran, karena sumber tidak tersedia.

/ usr / bin / java dan / usr / libexec / java_home keduanya menggunakan JavaLaunching.framework. Variabel lingkungan JAVA_HOME memang diperiksa pertama kali oleh / usr / bin / java dan teman-teman (tetapi bukan / usr / libexec / java_home.) Kerangka kerja menggunakan variabel lingkungan JAVA_VERSION dan JAVA_ARCH untuk memfilter JVM yang tersedia. Jadi, secara default:

$ /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

Tetapi pengaturan, katakanlah, JAVA_VERSION dapat menimpa default:

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

Anda juga dapat menyetel JAVA_LAUNCHER_VERBOSE = 1 untuk melihat beberapa logging debug tambahan sejauh jalur pencarian, JVM yang ditemukan, dll., Dengan / usr / bin / java dan / usr / libexec / java_home.

Di masa lalu, JavaLaunching.framework sebenarnya menggunakan sistem preferensi (di bawah domain com.apple.java.JavaPreferences) untuk mengatur urutan JVM yang disukai, memungkinkan JVM default disetel dengan PlistBuddy - tetapi sebaik yang saya tahu, itu kode telah dihapus di versi terbaru macOS. Variabel lingkungan tampaknya menjadi satu-satunya cara (selain mengedit Info.plist di bundel JDK itu sendiri.)

Menyetel variabel lingkungan default tentu saja dapat dilakukan melalui .profile Anda atau melalui launchd , jika Anda membutuhkannya disetel pada tingkat sesi.


Ini informasi yang bagus, Dan. Menggunakan .profiletidak berguna untuk kasus penggunaan saya (meluncurkan aplikasi dari misalnya launchpad) tetapi tipnya launchdbagus. Saya harus mencobanya, karena kegilaan versi Java baru-baru ini berarti saya memiliki beberapa generasi Java yang diinstal secara bersamaan, dengan berbagai tingkat kepercayaan (pribadi).
Christopher Schultz

-2

Edit: informasi ini khusus untuk visualvm, bukan untuk aplikasi java lainnya

Seperti yang disebutkan oleh orang lain, Anda perlu memodifikasi visualvm.conf

Untuk versi terbaru JvisualVM 1.3.6 di Mac, direktori instal telah berubah.

Saat ini ada di /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf .

Namun ini mungkin tergantung pada tempat Anda menginstal VisualVM. Cara termudah untuk menemukan di mana VisualVM Anda adalah memulainya, dan kemudian lihat prosesnya menggunakan:

ps -ef | grep VisualVM

Anda akan melihat sesuatu seperti:

... -Dnetbeans.dirs = / Aplikasi / VisualVM.app / Isi / Sumber / visualvm / visualvm ...

Anda ingin membuka properti netbeans.dir dan mencari direktori dan Anda akan menemukan folder etc.

Batalkan komentar baris ini di visualvm.conf dan ubah jalur ke jdk

visualvm_jdkhome="/path/to/jdk"

Selain itu, jika Anda mengalami kelambatan dengan visualvm Anda dan Anda memiliki banyak memori, saya sarankan untuk sangat meningkatkan jumlah memori yang tersedia dan menjalankannya dalam mode server:

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"

Saran buruk: memodifikasi skrip startup untuk aplikasi tertentu kemungkinan besar akan merusak aplikasi dan tidak menyelesaikan masalah asli dalam mengubah JVM default untuk OS.
Christopher Schultz

Sayangnya seperti yang disebutkan oleh orang lain, jvisualvm tidak menggunakan metode standar untuk memilih jvm. Ini adalah satu-satunya solusi untuk aplikasi ini.
Celandro

Seperti yang saya nyatakan dalam jawaban saya, Anda tidak perlu memodifikasi apa pun di dalam bundel aplikasi itu sendiri, aplikasi dapat memuat konfigurasinya dari ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf.
Ian Roberts

-2

Saya memiliki situasi yang serupa, dan proses berikut berhasil untuk saya:

  1. Di terminal, ketik

    vi ~/.profile
  2. Kemudian tambahkan baris ini di file, dan simpan

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

    dengan versi yang ada di komputer Anda, seperti 1.7.0_25

  3. Keluar dari editor, lalu ketik perintah berikut agar efektif

    source ~/.profile 

Kemudian ketik java -version untuk memeriksa hasilnya

    java -version 

Apa itu .profile? Dari: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

File .profile adalah file tersembunyi. Ini adalah file opsional yang memberi tahu sistem perintah mana yang harus dijalankan ketika pengguna yang file profilnya login. Misalnya, jika nama pengguna saya bruno dan ada file .profile di / Users / bruno /, semua isinya akan dijalankan selama prosedur log-in.


Ini tidak akan berfungsi saat meluncurkan VisualVM dari Launchpad. Meluncurkan dari baris perintah tidak pernah menjadi masalah, karena Anda dapat menyetel variabel lingkungan JAVA_HOME.
Christopher Schultz

-2

MacOS menggunakan / usr / libexec / java_home untuk menemukan Versi Java saat ini. Salah satu cara untuk melewati adalah dengan mengubah file plist seperti yang dijelaskan oleh @ void256 di atas. Cara lain adalah dengan mengambil backup java_home dan menggantinya dengan script java_home milik Anda sendiri yang memiliki kode
echo $ JAVA_HOME

Sekarang ekspor JAVA_HOME ke versi SDK yang diinginkan dengan menambahkan perintah berikut ke ~ / .bash_profile. export JAVA_HOME = "/ System / Library / Java / JavaVirtualMachines / 1.6.0.jdk / Contents / Home" launchctl setenv JAVA_HOME $ JAVA_HOME /// Jadikan variabel lingkungan global

Jalankan sumber perintah ~ / .bash_profile untuk menjalankan perintah di atas.

Setiap kali seseorang perlu mengubah JAVA_HOME, dia dapat mengatur ulang nilai JAVA_HOME di file ~ / .bash_profile.


Apa pun yang bergantung pada variabel lingkungan tidak akan berfungsi. Intinya adalah bahwa aplikasi yang diluncurkan melalui LaunchPad, dll. Tidak akan memiliki pengaturan lingkungan tersebut. Peretasan plist di atas tampaknya seperti yang "terbaik" karena benar-benar mencapai hasil yang diinginkan. Saya belum yakin tentang kerugiannya. Lihat jawaban dari @Tony yang memiliki masalah yang sama.
Christopher Schultz

-3

Saya ingin mengubah versi java default dari 1.6 * menjadi 1.7 *. Saya mencoba langkah-langkah berikut dan berhasil untuk saya:

  • Tautan "java" dihapus dari bawah / usr / bin
  • Membuatnya lagi, menunjuk ke lokasi baru:

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

  • diverifikasi dengan "java -version"

versi java "1.7.0_51"
Java (TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot (TM) 64-Bit Server VM (build 24.51-b03, mode campuran)


Tidak menjawab pertanyaan: itu tidak akan mempengaruhi perilaku /usr/libexec/java_home.
Christopher Schultz
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.