java - ओएस एक्स पर डिफ़ॉल्ट जावा (जेडीके) संस्करण को कैसे सेट या परिवर्तित करें?





macos (16)


/ Usr / libexec / java_home पर आधारित एक छोटा मछली फ़ंक्शन

function jhome
    set JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

यदि आप मछली का उपयोग नहीं करते हैं, तो आप बैश में कुछ ऐसा कर सकते हैं:

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home [email protected]`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

फिर जावा के बीच स्विच करने के लिए:

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6

रेफरी: https://gist.github.com/kenglxn/1843d552dff4d4233271

मैक पर जावा का डिफ़ॉल्ट संस्करण कैसे बदल सकता है?




जेएनवी का प्रयोग करें, यह जावा पर्यावरण प्रबंधक की तरह है। यह उपयोग करने और साफ करने के लिए बहुत आसान है

मैक के लिए, चरणों का पालन करें:

brew install jenv

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

स्थापना: यदि आप बैश का उपयोग कर रहे हैं तो इन चरणों का पालन करें:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

$ exec $SHELL -l

जेएनवी के जेवीएम के वांछित संस्करण जोड़ें:

jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

जेएनवी एड / सिस्टम / लाइब्रेरी / जावा / जावावार्टुअल माचिन / 1.8.0.jdk/Contents/Home

स्थापित संस्करणों की जांच करें:

jenv versions

जावा संस्करण को सेट करें जिसे आप उपयोग करना चाहते हैं:

jenv global oracle64-1.6.0



जेएनवी का प्रयोग एक आसान तरीका है।

1. जेएनवी स्थापित करें

    curl -s get.jenv.io | bash

2. कॉन्फिग जेनव

    cd ~/.jenv/candidates/
    mkdir java
    cd java
    mkdir 1.7
    mkdir 1.8

3. जेडीके पथ सिमलिंक करें

    ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.7
    ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.8

4. आप सब तैयार हैं

स्विच कमांड:

जेएनवी जावा 1.8 का उपयोग करें

डिफॉल्ट सेट करें:

जेएनवी डिफ़ॉल्ट जावा 1.7




function setjdk() {
  if [ $# -ne 0 ]; then
    removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
    if [ -n "${JAVA_HOME+x}" ]; then
      removeFromPath $JAVA_HOME
    fi
    export JAVA_HOME=`/usr/libexec/java_home -v [email protected]`
    export PATH=$JAVA_HOME/bin:$PATH
  fi
}

इसे अपने ~ / .profile में रखें और इसे अपने टर्मिनल में सेट करें जैसे कि setjdk 1.8 , setjdk 1.7 , setjdk 9 आदि आदि ...

यदि आपके पास removeFromPath नहीं है तो यह है:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }




यह उत्तर पता करने का प्रयास है: जावा संस्करण सिस्टम-वाइड को नियंत्रित करने के लिए (केवल वर्तमान में चलने वाले खोल में नहीं) जब मैकोज़ एल कैपिटन और सिएरा पर विकास उद्देश्यों के लिए जेडीके के कई संस्करण स्थापित किए जाते हैं। जहां तक ​​मैं कह सकता हूं, वर्तमान उत्तरों में से कोई भी ऐसा नहीं करता है (*)।

एक डेवलपर के रूप में, मैं कई जेडीके का उपयोग करता हूं, और मैं एक से दूसरे में आसानी से स्विच करना चाहता हूं। आम तौर पर मेरे पास सामान्य उपयोग के लिए नवीनतम स्थिर (जावा 8 अब) है, और परीक्षण के लिए अन्य (उदाहरण के लिए एक पुराना जेडीके 7 और एक "प्रारंभिक पहुंच" जेडीके 9 उदाहरण के लिए)। लेकिन मैं नहीं चाहता कि सिस्टम जावा 9 का उपयोग करे (उदाहरण के लिए जब मैं अपना आईडीई शुरू करता हूं)। डिफ़ॉल्ट नवीनतम स्थिर होना चाहिए।

मेरा वर्तमान समाधान:

  • सभी जेडीके को अपने डिफ़ॉल्ट स्थान पर, /Library/Java/JavaVirtualMachines नीचे छोड़ दें। सिस्टम डिफ़ॉल्ट रूप से उच्चतम संस्करण उठाएगा।
  • डिफ़ॉल्ट रूप से चुने जाने से जेडीके को बाहर करने के लिए, इसकी Contents/Info.plist का नाम Contents/Info.plist पर बदलें । उस जेडीके का अभी भी उपयोग किया जा सकता है जब $JAVA_HOME इंगित करता है, या स्पष्ट रूप से किसी स्क्रिप्ट या कॉन्फ़िगरेशन में संदर्भित किया जाता है। इसे सिस्टम के java कमांड द्वारा अनदेखा किया जाएगा।

सिस्टम लॉन्चर जेडीके का उपयोग उन लोगों के बीच उच्चतम संस्करण के साथ करेगा जिनके पास Info.plist फ़ाइल है।

वैकल्पिक jenv साथ एक खोल में काम करते समय, मौजूदा विधि ( jenv , या कस्टम उपनाम / स्क्रिप्ट के आसपास /usr/libexec/java_home , आदि) के बीच अपनी विधि चुनें।

इस जिस्ट में जांच का विवरण।

(*) वर्तमान उत्तर या तो अप्रचलित हैं (अब मैकोज़ एल कैपिटन या सिएरा के लिए मान्य नहीं हैं), या केवल एक जेडीके को संबोधित करते हैं, या सिस्टम-व्यापी पहलू को संबोधित नहीं करते हैं। कई लोग $JAVA_HOME को बदलने का तरीका बताते हैं, लेकिन यह केवल वर्तमान खोल को प्रभावित करता है और वहां से क्या लॉन्च किया जाता है। यह ओएस लॉन्चर से शुरू किए गए एप्लिकेशन को प्रभावित नहीं करेगा (जब तक कि आप सही फ़ाइल और लॉगआउट / लॉगिन नहीं बदलते, जो थकाऊ है)। जेनव के लिए, यह अच्छा और सब कुछ है, लेकिन जहां तक ​​मैं इसे बता सकता हूं केवल पर्यावरण चर बदलता है, इसलिए इसकी एक ही सीमा है।




पहला रन /usr/libexec/java_home -V जो निम्न जैसा कुछ आउटपुट करेगा:

Matching Java Virtual Machines (3):
1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

वह संस्करण चुनें जिसे आप डिफ़ॉल्ट होना चाहते हैं (तर्क के लिए 1.6.0_65-b14-462 ) तो:

export JAVA_HOME=`/usr/libexec/java_home -v 1.6.0_65-b14-462`

या यदि आप अद्वितीय हैं, तो आप केवल प्रमुख संस्करण निर्दिष्ट कर सकते हैं

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

अब जब आप java -version चलाते हैं तो आप देखेंगे:

java version "1.6.0_65"
Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)

बस अपने खोल की init फ़ाइल में export JAVA_HOME… लाइन जोड़ें।




यह टूल आपके लिए काम करेगा:

http://www.guigarage.com/2013/02/change-java-version-on-mac-os/

यह एक साधारण जावाऑन है जिसका उपयोग वर्तमान जावा संस्करण को परिभाषित करने के लिए किया जा सकता है। संस्करण को उस शैल में उपयोग किया जा सकता है जिसे टूल में किसी संस्करण के चयन के बाद खोला जाता है।




उपर्युक्त उत्तरों को जोड़कर, मैंने निम्नलिखित पंक्तियों को मेरे .bash_profile में रखा है जो इसे स्विच करने में वास्तव में सुविधाजनक बनाता है (जावा 9 के लिए @ elektromin की टिप्पणी सहित):

alias j9="export JAVA_HOME=`/usr/libexec/java_home -v 9`; java -version"
alias j8="export JAVA_HOME=`/usr/libexec/java_home -v 1.8`; java -version"
alias j7="export JAVA_HOME=`/usr/libexec/java_home -v 1.7`; java -version"

मैं निम्नलिखित टाइप करके जावा 8 पर स्विच कर सकता हूं:

$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)



ऐप्पल के आधिकारिक java_home (1) मैन पेज से :

**USAGE**

   /usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way for
   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
   tecture  requirement.  The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
   path to the Java command-line tool.

   Usage for bash-style shells:
          $ export JAVA_HOME=`/usr/libexec/java_home`

   Usage for csh-style shells:
          % setenv JAVA_HOME `/usr/libexec/java_home`



टी एल; डॉ

लाइन जोड़ें:

export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

फ़ाइल में

~/.bashrc

स्पष्ट रूप से अपने डाउनलोड संस्करण के साथ प्रतिस्थापित करें।




जेडीके स्विच स्क्रिप्ट

मैंने ऊपर @Alex से जवाब अनुकूलित किया है और जावा 9 के लिए कोड को ठीक करने के लिए निम्नलिखित लिखा है।

$ cat ~/.jdk
#!/bin/bash

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
  echo "Switching java version $1";

  requestedVersion=$1
  oldStyleVersion=8
  # Set the version
  if [ $requestedVersion -gt $oldStyleVersion ]; then
    export JAVA_HOME=$(/usr/libexec/java_home -v $1);
  else
    export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
  fi

  echo "Setting JAVA_HOME=$JAVA_HOME"

  which java
  java -version;
}

जावा 8 पर स्विच करें

$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

जावा 9 पर स्विच करें

$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)



यदि आपके पास एकाधिक संस्करण हैं और आप किसी विशिष्ट संस्करण का उपयोग करके कुछ चलाने के लिए चाहते हैं, तो इस उदाहरण का उपयोग करें:

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar



यह थोड़ा मुश्किल है, लेकिन ओएस एक्स 10.9 (मैवरिक्स) पर जावा स्थापित करने में वर्णित चरणों का पालन करने का प्रयास करें। असल में, आपको java अपने उपनाम अपडेट करना होगा।

क्रमशः:

sudo ln -snf 1.7 इंस्टॉल करने के बाद, आपको वर्तमान java में लिंक बदलने के लिए sudo ln -snf करना होगा। ऐसा करने के लिए, टर्मिनल खोलें और कमांड जारी करें:

sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

ध्यान दें कि निर्देशिका jdk1.7.0_51.jdk आपके द्वारा स्थापित एसडीके संस्करण के आधार पर बदल सकती है।

अब, jdk_1.7.0_xx.jdk को स्थापित करने के लिए आपको JAVA_HOME सेट करने की आवश्यकता है। फिर टर्मिनल खोलें और टाइप करें:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"

जावा को अपने टर्मिनल में स्थायी रूप से रखने के लिए आप अपनी .bashrc फ़ाइल में उपरोक्त export JAVA_HOME लाइन जोड़ सकते हैं




यदि आप मछली का उपयोग कर रहे हैं और आप मैक का उपयोग कर रहे हैं और आप जेडीके के बीच स्विच करने में सक्षम होना चाहते हैं, तो मैक पर मेरे लिए नीचे काम करता है।

@ केनग्क्सन का जवाब मेरे लिए काम नहीं करता था और मुझे पता चला कि बीसीओ ने सेट नहीं किया है-जी जो वैश्विक है!

~ / .config / fish / config.fish के नीचे नीचे रखें

alias j8="jhome  -v 1.8.0_162"
alias j9="jhome  -v 9.0.1"

function jhome
    set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

funcsave jhome

यह जानने के लिए कि आपने कौन सा संस्करण / मामूली संस्करण स्थापित किया है, आप यह कर सकते हैं:

/usr/libexec/java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home



सिर्फ जेआरई नहीं, जेडीके स्थापित करें

/usr/libexec/java_home -v 1.8

देता है

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

आगामी

touch .bash_profile

open -a TextEdit.app .bash_profile

TextEdit आपको एक खाली पृष्ठ दिखाएगा जिसमें आप भर सकते हैं।

दस्तावेज़ में जोड़ें: export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

टर्मिनल में:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

आदेश आज़माएं:

javac -version

आउटपुट होना चाहिए:

javac 1.8.0_111



ऐसा करने का एक अच्छा तरीका अपाचे कॉमन्स IOUtils का उपयोग IOUtils को IOUtils में कॉपी करने के लिए कर रहा है ... कुछ ऐसा

StringWriter writer = new StringWriter();
IOUtils.copy(inputStream, writer, encoding);
String theString = writer.toString();

या और भी

// NB: does not close inputStream, you'll have to use try-with-resources for that
String theString = IOUtils.toString(inputStream, encoding); 

वैकल्पिक रूप से, यदि आप अपने स्ट्रीम और लेखकों को मिश्रण नहीं करना चाहते हैं तो आप ByteArrayOutputStream उपयोग कर सकते हैं





java macos