मैं मैक ओएस का डिफ़ॉल्ट जावा वीएम / usr / libexec / java_home से कैसे बदल सकता हूं


108

(यह सुनिश्चित नहीं था कि अगर यह एसयू पर जाना चाहिए ... माइग्रेशन निश्चित रूप से एक विकल्प है, लेकिन अधिक प्रोग्रामर यहां सवाल पढ़ते हैं, इसलिए यहां जाता है)।

मैं Mac OS X 10.8.4 चला रहा हूं, और मेरे पास Apple का JDK 1.6.0_51 और साथ ही Oracle का JDK 1.7.0_25 है। मैंने हाल ही में ओरेकल के 1.8 प्रीव्यू JDK को कुछ प्री-रिलीज़ सॉफ़्टवेयर के लिए स्थापित किया है जिनकी आवश्यकता है। अब, जब मैं / usr / libexec / java_home चलाता हूं, तो मुझे यह मिलता है:

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

महान।

हालाँकि, चल रहा है:

$ java -version

यह दिखाता है:

java version "1.8.0-ea"

इसका मतलब है कि जावा का डिफ़ॉल्ट संस्करण वर्तमान में पूर्व-रिलीज़ संस्करण है, जो कुछ "सामान्य" पैकेजों को तोड़ता है (मेरे मामले में, VisualVM)।

मैं सेट नहीं कर सकता JAVA_HOMEक्योंकि लॉन्चिंग एप्लिकेशन कमांड चर (जैसे $ open /Applications/VisualVM.app) से लॉन्च करते समय भी पर्यावरण चर को अनदेखा करता है ।

तो, क्या कोई फाइल है जिसे मैं संपादित कर सकता हूं जहां मैं विश्व स्तर पर अपनी जेवीएम ऑर्डरिंग प्राथमिकताएं निर्धारित कर सकता हूं ?

(कृपया मुझे जावा प्रेफरेंस पैनल लॉन्च करने के लिए न कहें क्योंकि यह केवल काम नहीं करता है: इसमें कुछ उपयोगी नहीं है और केवल 4 जेवीएम में से एक को सूचीबद्ध करता है जो मैंने स्थापित किया है।)

अपडेट :

ओरेकल जेवीएम में रहते हैं /Library/Java/JavaVirtualMachines। JDK 1.8 निर्देशिका को फिर से नाम देना jdk1.8.0.jvm.xyzकुछ भी नहीं बदलता है: java_homeअभी भी इसे सही जगह पर पाता है, और चल रहा है / usr / bin / java अभी भी 1.8 JVM निष्पादित करता है। यह सिंकलिंक, आदि के साथ कोई समस्या नहीं है।

इसी तरह के सवालों के जवाब

हालांकि यह उत्तर प्रदान करता है कि एक हैक के लिए कितनी मात्रा में जावा के संस्करणों को java_home द्वारा उठाया जाएगा, यह अभी भी इस सवाल का जवाब नहीं देता है कि java_home अपना डिफ़ॉल्ट कैसे चुनता है और उपयोगकर्ता इसे गैर-विनाशकारी रूप से सेट कर सकते हैं या नहीं ।


'जो जावा' टाइप करें और ब्रेडक्रंब का पालन करें। /usr/bin/javaसिर्फ एक सिम्लिंक है
ब्रायन रोच

11
वहाँ किया गया था कि। /usr/bin/javaको इंगित करता है /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javaVersionsनिर्देशिका 1.8.0 JDK करने के लिए एक सिमलिंक न। इसके बजाय, इसमें एक निर्देशिका होती है, Aजो मददगार कहलाती है, जो Currentइंगित करती है। Aयह "JAVA_HOME" नहीं है। इसमें एक उपनिर्देशिका है जिसे Commandsएक javaकमांड कहा जाता है , लेकिन यह एक अपारदर्शी सार्वभौमिक बाइनरी है, जो कौन जानता है-क्या करता है। मुझे संदेह है कि इसका उपयोग करता है java_home, आदि यह तय करने के लिए कि जेवीएम का उपयोग करना है।
क्रिस्टोफर स्कुल्ट

2
यदि यह बंद विषय है, तो कृपया बंद करने के बजाय माइग्रेट करें। एफडब्ल्यूआईडब्ल्यू, यह "सॉफ्टवेयर टूल के बारे में है जो आमतौर पर प्रोग्रामर द्वारा उपयोग किया जाता है" इसलिए "ऑफ-टॉपिक" को बंद करना असंगत है।
क्रिस्टोफर शुल्त्स 16

हाँ, यह निराशाजनक है! मैं बस सभी के लिए एक JDK चाहता हूं, या शायद 2 जो मैं 1.7 और 1.8 के बीच आसानी से स्विच कर सकता हूं।
ब्रायन

1
मुझे यह SO उत्तर इस प्रश्न के लिए उपयोगी लगा: stackoverflow.com/a/44169445/2987755
dkb

जवाबों:


89

मुझे लगता JAVA_HOMEहै कि सबसे अच्छा आप कर सकते हैं। आदेश-पंक्ति उपकरण जैसे javaऔर javacपर्यावरण चर का सम्मान करेंगे, आप कमांड लाइन टूल जावा 7 का उपयोग /usr/libexec/java_home -v '1.7*'करने के लिए आपको एक उपयुक्त मूल्य देने के लिए उपयोग कर सकते हैं JAVA_HOME

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

लेकिन मानक डबल-क्लिक करने योग्य एप्लिकेशन बंडलों में JDKs का उपयोग बिल्कुल भी नहीं किया जाता है /Library/Java.appApple के उपयोग से पुरानी शैली के बंडलों में JavaApplicationStubApple Java 6 का उपयोग किया जाएगा /System/Library/Frameworks, और बिना बंडल वाले JRE के साथ AppBundler के साथ निर्मित नई शैली वाले "सार्वजनिक" JRE का उपयोग करेंगे /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home- जो कि स्टब कोड में हार्ड-कोडित है और इसे बदला नहीं जा सकता है, और आपके पास एक ही समय में दो अलग-अलग सार्वजनिक JRE स्थापित नहीं हो सकते।


संपादित करें: मैंने विशेष रूप से VisualVM पर एक नज़र डाली है, यह मानते हुए कि आप डाउनलोड पृष्ठ से "एप्लिकेशन बंडल" संस्करण का उपयोग कर रहे हैं , और यह विशेष ऐप AppBundler एप्लिकेशन नहीं है, इसके बजाय इसका मुख्य निष्पादन एक शेल स्क्रिप्ट है जो एक नंबर को कॉल करता है अन्य शेल स्क्रिप्ट्स और विभिन्न कॉन्फ़िगरेशन फ़ाइलों को पढ़ता है। यह नवीनतम JDK /Library/Javaको तब तक लेने से चूकता है जब तक कि 7u10 या बाद का है, या जावा 6 का उपयोग करता है यदि आपका जावा 7 इंस्टॉलेशन 9 या उससे पहले अपडेट है। लेकिन शेल स्क्रिप्ट्स में तर्क को उजागर करना मुझे ऐसा लगता है जैसे आप कॉन्फ़िगरेशन फ़ाइल का उपयोग करके एक विशेष जेडीके निर्दिष्ट कर सकते हैं।

एक पाठ फ़ाइल बनाएँ ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf(1.3.6 की जगह जो भी VisualVM आप उपयोग कर रहे हैं) लाइन के साथ

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

और यह इसे 8 के बजाय जावा 7 चुनने के लिए मजबूर करेगा।


मेरे सिस्टम पर ऐसा नहीं लगता है। JDK 1.8 स्थापित होने से पहले VisualVM को लॉन्च करने पर काम किया गया था। JDK1.8 के बाद, VisualVM स्प्लैश स्क्रीन दिखाता है, फिर मर जाता है। JDK1.8 निर्देशिका को लाइब्रेरी / जावा से बाहर ले जाने से चलाने की क्षमता बहाल हो जाती है।
क्रिस्टोफर शुल्त्स

@ChristopherSchultz मैंने VisualVM बंडल के अंदर एक नज़र डाली है और यह पता चला है कि यह एक सामान्य ऐप्लीकेशन एप्लिकेशन नहीं है। संभावित वर्कअराउंड के लिए मेरा संपादन देखें।
इयान रॉबर्ट्स

क्षमा करें, मैंने अपनी पिछली टिप्पणी आपके संपादन से पहले लिखी थी। मैं उस तकनीक का उपयोग करके चलाने के लिए VisualVM की जांच करूंगा, लेकिन यह सार्वभौमिक रूप से लागू होने की संभावना नहीं है। मेरे पास अन्य जावा-आधारित सॉफ्टवेयर टैट I का एक गुच्छा है जो मुझे एक्लिप्स, जैस्पररीपोर्ट्स iReport आदि की तरह चलता है, जो इससे प्रभावित होने की पूरी संभावना है। मुझे लगता है कि मैं सिर्फ JDK1.8 निर्देशिका को कहीं और ले जाऊंगा और उस JAVA_HOME के ​​साथ स्पष्ट रूप से (कुछ) बार उपयोग करूंगा कि मुझे वास्तव में इसकी आवश्यकता है।
क्रिस्टोफर शुल्त्स

1
हाँ, आप सही कह रहे हैं, JAVA_HOMEजाने का तरीका है और सामान्य रूप से आपका सबसे अच्छा शर्त यह है कि आप अन्य मामलों में आवश्यक मामूली संस्करण को निर्दिष्ट करें। Disassembly के आधार पर, यह पता चलता है कि आप JDK8 के बजाय JKD7 को दिखाने के export JAVA_VERSION=1.7लिए java_homeडिफ़ॉल्ट बना सकते हैं , लेकिन यह टूट जाता है java_home -v 1.6क्योंकि java-homeयह एक अतिरिक्त बाधा के रूप में व्याख्या करता है और पारस्परिक रूप से असंतोषजनक बाधाओं के कारण छोड़ देता है, फिर बस --failfastविकल्प के साथ भी डिफ़ॉल्ट 1.8 के साथ चला जाता है।
andrewdotn

2
मुझे समझ नहीं आ रहा है कि सिस्टम वरीयताएँ जावा कंट्रोल पैनल सिर्फ शेल स्क्रिप्ट / कमांड का सहारा लेने की बजाय सूची सेलेक्ट करने की सूची क्यों प्रस्तुत नहीं करता है। मुझे संदेह है कि यह केवल ब्राउज़र में चलने वाले Applets के लिए है ...
JGFMK

51

मैं वहां भी गया हूं और हर जगह खोजा गया है कि कैसे /usr/libexec/java_homeकाम करता है लेकिन मुझे इस बारे में कोई जानकारी नहीं मिली कि यह उपलब्ध जावा वर्चुअल मशीनों को कैसे निर्धारित करता है।

मैंने थोड़ा प्रयोग किया है और मुझे लगता है कि यह बस एक को निष्पादित करता है ls /Library/Java/JavaVirtualMachinesऔर फिर ./<version>/Contents/Info.plistसभी रनटाइम्स का निरीक्षण करता है जो इसे वहां पाता है।

इसके बाद उन्हें Info.plist में निहित कुंजी द्वारा नीचेJVMVersion उतारा जाता है और डिफ़ॉल्ट रूप से यह पहली प्रविष्टि का उपयोग अपने डिफ़ॉल्ट JVM के रूप में करता है।

मुझे लगता है कि केवल एक चीज जो हम कर सकते हैं वह है sudo vi /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Info.plistप्लिस्ट को बदलना: और फिर जेवीएमवर्सन 1.8.0को किसी और चीज़ से संशोधित करना जो इसे ऊपर की बजाय नीचे की ओर छाँट देता है, जैसे !1.8.0

कुछ इस तरह:

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

और फिर यह जादुई रूप से सूची के शीर्ष से गायब हो जाता है:

/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

अब आपको लॉगआउट / लॉगिन करना होगा और फिर:

java -version
java version "1.7.0_45"

:-)

निश्चित रूप से मुझे नहीं पता कि क्या कुछ और टूटता है या अगर जावा का 1.8.0-ई संस्करण अभी भी सही तरीके से काम करता है।

आपको शायद इनमें से कुछ भी नहीं करना चाहिए, लेकिन इसके बजाय केवल 1.8.0 की स्थापना रद्द करें।

हालाँकि अभी तक यह मेरे लिए काम कर रहा है।


इसने मेरे लिए काम किया। मुझे इस tweak का उपयोग MacOS पर मेरे लिए Idea Sbt plugin को काम करने के लिए करना है। मैं अपने ब्लॉग पर यह उल्लेख कर रहा हूँ agilebuild.blogspot.com/2014/02/...
एंटोनी

यह काम करता है लेकिन यह थोड़ा मुश्किल लगता है और मानक संचालन प्रक्रिया की तरह नहीं लग सकता है। अगर बेहतर तरीका हो तो मैं भटकता हूं।
वीबो ली

मैं अभी भी इसके लिए एक समाधान चाहूंगा, लेकिन Intellij के लिए JDK का उपयोग करने के लिए मैंने इसे अपने zshenv में जोड़ा: निर्यात IDEA_JDK = /usr/libexec/java_home -v 1.7। मुझे लगता है कि मैं JAVA_HOME के ​​लिए भी ऐसा ही करूंगा ...
David Resnick

मैं जावा 9 लॉन्चिंग डबल-क्लिक एप्लिकेशन (कीस्टोर स्टोर एक्सप्लोरर में एक समस्या के कारण) का उपयोग करने से बचने के लिए इस उत्तर का उपयोग करने का प्रबंधन करता हूं। धन्यवाद!
निकोलस हेन्को

2
MacOS पर JDK और JRE की स्थापना से एक अंश : macOS 2012-006 के लिए जावा को स्थापित करने के बाद, स्थापित किया /usr/bin/javaगया सबसे नया JDK मिलेगा , और जावा से संबंधित कमांड-लाइन टूल के सभी के लिए इसका उपयोग करेगा /usr/bin
जेरेमी काओ

7

यह वास्तव में बहुत आसान है। मान लें कि हमारे पास हमारे JavaVirtualMachines फ़ोल्डर में यह है:

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

कल्पना कीजिए कि 1.8 हमारी डिफ़ॉल्ट है, फिर हम सिर्फ एक नया फ़ोल्डर (उदाहरण के लिए 'पुराना') जोड़ते हैं और डिफ़ॉल्ट jdk फ़ोल्डर को उस नए फ़ोल्डर में ले जाते हैं। क्या java -versionएट देखा फिर से, 1.7!


1
अविश्वसनीय है, लेकिन यह काम किया ... धन्यवाद मैक ओएस Mojave
माइकल डोबी Dobrzański

5

यह बहुत आसान है, अगर आपको अपनी आस्तीन ऊपर चढ़ाने में कोई आपत्ति नहीं है ... / लाइब्रेरी / जावा / होम JAVA_HOME के ​​लिए डिफ़ॉल्ट है, और यह सिर्फ एक लिंक है:

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

इसलिए मैं अपने डिफ़ॉल्ट JVM / JDK संस्करण को JAVA_HOME की सामग्री को बदले बिना बदलना चाहता था ... / लाइब्रेरी / जावा / होम वर्तमान JVM / JDK के लिए मानक स्थान है और यही वह है जो मैं संरक्षित करना चाहता था ... मुझे ऐसा लगता है कम से कम दुष्प्रभावों के साथ चीजों को बदलने का सबसे आसान तरीका है।

यह वास्तव में सरल है। जावा के किस संस्करण को बदलने के लिए आप जावा-वर्जन के साथ देखते हैं, आपको बस इसके कुछ संस्करण देने हैं:

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

मैंने समय नहीं लिया है, लेकिन एक बहुत ही सरल शेल स्क्रिप्ट है जो / usr / libexec / java_home का उपयोग करता है और उपरोक्त समलिंक को निरूपित करने के लिए ln को बेवकूफ बनाना आसान होना चाहिए ...

एक बार जब आप बदल गए हैं जहां / लाइब्रेरी / जावा / होम को इंगित किया गया है ... आपको सही परिणाम मिलता है:

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
यह नहीं है कि यह सामान कैसे काम करता है: /Library/Java/Homeवास्तव में एक सिम्लिंक है, लेकिन यह इंगित करता है /System/Library/Frameworks/JavaVM.framework/Homeकि स्वयं सिम्बलिंक के एक बड़े झंझट में है जो आखिरकार आपको मिलता है ... एक जादुई कमांड जो लॉन्च करने के लिए सही JRE निर्धारित करता है। ध्यान दें कि /usr/libexec/java_homeइस जादू में लिंक भी। इसलिए, आप सिर्फ़ सहानुभूति की जगह और एक ही JRE की ओर इशारा करके सब कुछ बाधित कर सकते हैं, लेकिन आपको हर बार इसे अपडेट करना होगा। जाहिर तौर पर इसके जैसा set_preferred_jvm_versionया कोई आदेश नहीं है ।
क्रिस्टोफर शुल्त्स

1
हालांकि, इस तकनीक का लाभ यह है कि आपको JAVA_HOMEकहीं भी सेट करने की आवश्यकता नहीं है । मैं यह देखने के लिए इस तकनीक के साथ खेलूंगा कि क्या यह जावा-आधारित कार्यक्रमों के परिणामस्वरूप "पसंदीदा" जावा वीएम के साथ लॉन्च होगा। मुझे शक है कि यह होगा, लेकिन यह बहुत नाजुक है।
क्रिस्टोफर शुल्त्

वैसे इन दिनों मेरे पास बस यही है .bash_profile:export JAVA_HOME=`/usr/libexec/java_home -v 12`
jrypkahauer

यह एक आइकन पर डबल-क्लिक करने के लिए काम नहीं करता है, जो पूरे बिंदु की तरह था। समाधान जो केवल कमांड-लाइन से काम करते हैं ... समाधान नहीं।
क्रिस्टोफर शुल्त्स

3

जावा 7 के लिए ओरेकल की स्थापना रद्द करने के निर्देशों ने मेरे लिए काम किया।

अंश:

JDK को अनइंस्टॉल करना JDK को अनइंस्टॉल करने के लिए, आपके पास प्रशासक विशेषाधिकार होने चाहिए और निष्कासन कमांड को रूट के रूप में या sudo (8) टूल का उपयोग करके निष्पादित करना चाहिए।

/ लाइब्रेरी / जावा / JavaVirtualMachines पर नेविगेट करें और उस निर्देशिका को हटा दें जिसका नाम निम्नलिखित प्रारूप से मेल खाता है: *

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

उदाहरण के लिए, 7u6 की स्थापना रद्द करने के लिए:

% rm -rf jdk1.7.0_06.jdk


2
यह सवाल संयुक्त राष्ट्र की स्थापना के बारे में नहीं था ... यह उन लोगों में से "प्राथमिक" जेवीएम को चुनने के बारे में था जो स्थापित किए गए हैं ...
क्रिस्टोफर शुल्त्स

3

थोड़ा देर से, लेकिन यह मैक OSX के साथ एक जारी समस्या है ...

सबसे आसान समाधान जो मुझे मिला वह था OpenJDK सामान को हटाना जो Apple स्थापित करता है। हर बार Mac OSX का अपडेट आने के बाद यह इंस्टॉल हो जाता है और आपको इसे फिर से निकालने की आवश्यकता होगी।

यह वास्तव में अच्छी तरह से काम करता है यदि आप जावा का उपयोग करके अपने मैक पर Google ऐप इंजन के लिए ऐप विकसित करते हैं। OpenJDK अच्छी तरह से काम नहीं करता है और मैक OSX Yosemite के उन्नयन के साथ आने वाले जावा संस्करण ऐप्लिक इंजन क्रैश के लिए एक्लिप्स प्लग-इन के लिए हर तैनाती में सहायक त्रुटि के साथ कर देगा: "रीड आउट टाइम"।


1
मजेदार ... मुझे लगा कि Apple ने इस बिंदु पर जावा को पूरी तरह से हटा दिया था। मुझे मैन्युअल रूप से Apple के Java 1.6 JVM को हटाने की याद नहीं है, और यह निश्चित रूप से अब यहाँ नहीं है। किसी भी दर पर, यह वास्तव में उस मूल समस्या को ठीक नहीं करता है जो कि एक पसंदीदा JVM को निर्दिष्ट करने के लिए थी जिसे स्थापित किया गया है।
क्रिस्टोफर शुल्त्स

तुम सही हो। यह सवाल का जवाब नहीं है। यह इसका उत्तर देता है: यदि आप उपयोग किए जा रहे जेवीएम को हटाते हैं, तो सूची में 'अगला' का उपयोग किया जाता है। शायद यही मदद करता है।
Mo'in Creemers

क्या यह बताता है कि jdk 8 इंस्टॉल चलाने के बाद, यह JavaVirtualMachines फ़ोल्डर में क्यों नहीं दिखता है? सभी मैं देख रहा हूं "1.6.0.jdk" कोई फर्क नहीं पड़ता कि मैं किस संस्करण को स्थापित करता हूं।
Whyoz

@whyoz ने बस OS10 10.10.2 पर jdk-8u31-macosx-x64 स्थापित किया था और VM को JavaVirtualMachines फ़ोल्डर में अपेक्षा के अनुसार स्थापित किया गया था।
Mo'in Creemers

क्या आप संयोग से समानताएं चला रहे हैं? मैंने इसे Parallels के विंडोज साइड में स्थापित किया और 8u31 को अपेक्षित रूप से स्थापित किया..बल्कि मैक साइड पर नहीं ..
Whyoz

3

मैंने "जेनव" और अन्य चीजों को "JAVA_HOME" सेट किया जैसे कि सफलता के बिना। अब मैं और निम्नलिखित समाधान के साथ समाप्त होता है

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 या ~ / .bash.profile या ~ / .zshrc में जोड़ा गया)

और इस तरह बुला रहा है:

setJava 1.8

java_home गलत इनपुट को हैंडल करेगा। इसलिए आप कुछ गलत नहीं कर सकते। मावेन और अन्य सामान अब सही संस्करण उठाएगा।


1

मैं वास्तव में इस disassembler में एक छोटे से देखा, क्योंकि स्रोत उपलब्ध नहीं है।

/ usr / bin / java और / usr / libexec / java_home दोनों JavaLaunching.framework का उपयोग करते हैं। JAVA_HOME पर्यावरण चर वास्तव में / usr / bin / java और मित्रों (लेकिन नहीं / usr / libexec / java_home।) द्वारा पहले चेक किया जाता है। फ्रेमवर्क JAVA_VERSION और JAVA_ARCH envirionment चर उपलब्ध JVMs को फ़िल्टर करने के लिए उपयोग करता है। तो, डिफ़ॉल्ट रूप से:

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

लेकिन, सेटिंग, कहना, JAVA_VERSION डिफ़ॉल्ट को ओवरराइड कर सकता है:

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

आप कुछ अतिरिक्त डिबग लॉगिंग देखने के लिए JAVA_LAUNCHER_VERBOSE = 1 भी सेट कर सकते हैं, जहाँ तक दोनों, usr / bin / java और / usr / libexec / java_home के साथ JVMs आदि खोज पथ पाए जाते हैं।

अतीत में, JavaLaunching.framework वास्तव में वरीय JVM ऑर्डर सेट करने के लिए प्राथमिकता प्रणाली (com.apple.java.JavaPreferences डोमेन के तहत) का उपयोग करता था, जिससे डिफ़ॉल्ट JVM को प्लोडबड्डी के साथ सेट किया जा सके - लेकिन जैसा कि मैं बता सकता हूं, सबसे अच्छा है macOS के हाल के संस्करणों में कोड हटा दिया गया है। पर्यावरण चर एक ही रास्ता प्रतीत होता है (जेडीके में Info.plist को संपादित करने से अलग)।

डिफ़ॉल्ट पर्यावरण चर सेट करना निश्चित रूप से आपके .profile के माध्यम से या लॉन्चड के माध्यम से किया जा सकता है , अगर आपको ज़रूरत है तो उन्हें सत्र स्तर पर सेट किया जाना चाहिए।


यह महान जानकारी है, दान। का उपयोग करना .profileमेरे उपयोग-मामले के लिए उपयोगी नहीं है (जैसे लॉन्चपैड से एक एप्लिकेशन लॉन्च करना), लेकिन टिप launchdएक अच्छा है। मुझे यह बताने की कोशिश करनी होगी कि जावा के हालिया संस्करण पागलपन का मतलब है कि मेरे पास (व्यक्तिगत) ट्रस्ट के विभिन्न स्तरों के साथ-साथ जावा की कई पीढ़ियां स्थापित हैं।
क्रिस्टोफर

-2

संपादित करें: यह जानकारी विज़ुअल्म के लिए विशेष रूप से है, किसी अन्य जावा ऐप के लिए नहीं

जैसा कि दूसरों द्वारा बताया गया है, आपको Visualvm.conf को संशोधित करना होगा

मैक पर JvisualVM 1.3.6 के नवीनतम संस्करण के लिए, इंस्टॉल निर्देशिका बदल गई है।

यह वर्तमान में /Applications/VisualVM.app/Contents/Resources/visualvm/etc/visualvm.conf में है

हालाँकि यह इस बात पर निर्भर हो सकता है कि आपने VisualVM कहाँ स्थापित किया है। यह पता लगाने का सबसे आसान तरीका है कि आपका विज़ुअलवीएम कहाँ से शुरू होता है, और फिर उपयोग करने की प्रक्रिया को देखें:

ps -ef | grep VisualVM

आप कुछ इस तरह देखेंगे:

... -Dnetbeans.dirs = / Applications / VisualVM.app / सामग्री / संसाधन / visualvm / visualvm ...

आप netbeans.dir प्रॉपर्टी लेना चाहते हैं और एक डायरेक्टरी देख सकते हैं और आपको आदि फोल्डर मिल जाएंगे।

Visualvm.conf में इस लाइन को अनलॉक करें और jdk का पथ बदलें

visualvm_jdkhome="/path/to/jdk"

इसके अतिरिक्त, यदि आप अपने विजुअल्म के साथ धीमी गति से चल रहे हैं और आपके पास बहुत अधिक मेमोरी है, तो मैं आपको उपलब्ध स्मृति की मात्रा को बढ़ाने और सर्वर मोड में चलाने का सुझाव दूंगा:

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"

बुरी सलाह: किसी विशेष एप्लिकेशन के लिए स्टार्टअप स्क्रिप्ट को संशोधित करने से संभवतः एप्लिकेशन टूट जाएगा और ओएस के लिए डिफ़ॉल्ट जेवीएम को बदलने की मूल समस्या को हल नहीं करता है।
क्रिस्टोफर शुल्त्स

दुर्भाग्य से जैसा कि दूसरों द्वारा उल्लेख किया गया है, jvisualvm jvm चुनने के लिए मानक तरीकों का उपयोग नहीं करता है। यह इस ऐप का एकमात्र समाधान है।
Clandro

जैसा कि मैंने अपने उत्तर में कहा है कि आपको एप्लिकेशन बंडल के अंदर कुछ भी संशोधित करने की आवश्यकता नहीं है, ऐप इसके कॉन्फ़िगरेशन को लोड कर सकता है ~/Library/Application Support/VisualVM/1.3.6/etc/visualvm.conf
इयान रॉबर्ट्स

-2

मेरे पास एक समान स्थिति थी, और निम्नलिखित प्रक्रिया ने मेरे लिए काम किया:

  1. टर्मिनल में, टाइप करें

    vi ~/.profile
  2. फिर इस लाइन को फाइल में जोड़ें, और सेव करें

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

    जहाँ संस्करण आपके कंप्यूटर पर एक है, जैसे कि 1.7.0_25

  3. संपादक से बाहर निकलें, फिर निम्न कमांड टाइप करें जो इसे प्रभावी बनाता है

    source ~/.profile 

फिर परिणाम जांचने के लिए java -version टाइप करें

    java -version 

लाभकारी क्या है? प्रेषक: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

.profile फ़ाइल एक छिपी हुई फ़ाइल है। यह एक वैकल्पिक फ़ाइल है, जो उस सिस्टम को बताती है जो उस उपयोगकर्ता को चलाने की आज्ञा देता है, जिसकी प्रोफ़ाइल फ़ाइल में यह उपयोगकर्ता लॉग इन करता है। उदाहरण के लिए, यदि मेरा उपयोगकर्ता नाम ब्रूनो है और उसकी सभी सामग्रियों में / Users / bruno / में एक .profile फ़ाइल है। लॉग-इन प्रक्रिया के दौरान निष्पादित किया जाएगा।


लॉन्चपैड से VisualVM लॉन्च करते समय यह काम नहीं करेगा। कमांड-लाइन से लॉन्च करना कभी भी समस्या नहीं है, क्योंकि आप JAVA_HOME पर्यावरण चर सेट कर सकते हैं।
क्रिस्टोफर शुल्त्स

-2

MacOS वर्तमान जावा संस्करण को खोजने के लिए / usr / libexec / java_home का उपयोग करता है। बायपास करने का एक तरीका है कि ऊपर दिए गए @ void256 द्वारा बताई गई प्लिस्ट फाइल को बदल दें। अन्य तरीके से java_home का बैकअप लेना है और इसे अपनी स्क्रिप्ट java_home से बदलना है, जिसमें कोड
इको $ JAVA_HOME है

अब निम्नलिखित कमांड को ~ / .bash_profile में जोड़कर JAVA_HOME को SDK के इच्छित संस्करण में निर्यात करें। निर्यात करें

ऊपर दिए गए आदेशों को चलाने के लिए कमांड स्रोत ~ / .bash_profile चलाएं।

किसी को भी JAVA_HOME बदलने की आवश्यकता है वह JAVA_HOME मान को ~ / .bash_profile फ़ाइल में रीसेट कर सकता है।


पर्यावरण चर पर निर्भर कुछ भी काम नहीं करेगा। मुद्दा यह है कि लॉन्चपैड आदि के माध्यम से लॉन्च किए गए एप्लिकेशन में वह पर्यावरण सेटअप नहीं होगा। ऊपर दिए गए प्लिस्ट हैक "सर्वश्रेष्ठ" की तरह लगता है कि यह वास्तव में वांछित परिणाम प्राप्त करता है। मैं किसी भी downsides के बारे में निश्चित नहीं हूँ, फिर भी। @Tony से उत्तर देखें जिसमें वही समस्या है।
क्रिस्टोफर शुल्त्ज़

-3

मैं डिफ़ॉल्ट जावा संस्करण के रूप को 1.6 * से 1.7 * में बदलना चाहता था। मैंने निम्नलिखित चरणों की कोशिश की और यह मेरे लिए काम किया:

  • हटाया गया लिंक "जावा" अंडर / usr / बिन से
  • नए स्थान की ओर इशारा करते हुए इसे फिर से बनाया गया:

ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0.051_jdk/Contents/Home/bin/java java

  • "जावा-वर्सन" से सत्यापित

जावा संस्करण "1.7.0_51"
जावा (टीएम) एसई रनटाइम एनवायरनमेंट (बिल्ड 1.7.0_51-बी 13)
जावा हॉटस्पॉट (टीएम) 64-बिट सर्वर वीएम (24.51-b03, मिश्रित मोड का निर्माण)


प्रश्न का उत्तर नहीं देता: यह व्यवहार को प्रभावित नहीं करेगा /usr/libexec/java_home
क्रिस्टोफर शुल्त्
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.