सभी उपयोगकर्ताओं के लिए लिनक्स में JAVA_HOME कैसे सेट करें


185

मैं लिनक्स सिस्टम में नया हूं और बहुत सारे जावा फोल्डर हैं।

java -version मुझे देता है:

  • जावा संस्करण "1.7.0_55"
  • OpenJDK रनटाइम एनवायरनमेंट (rhel-2.4.7.1.el6_5-x86_64 u55-b13)
  • OpenJDK 64-बिट सर्वर VM (24.51-b03, मिश्रित मोड का निर्माण)

जब मैं मावेन परियोजना बनाने की कोशिश कर रहा हूं, तो मुझे त्रुटि हो रही है:

Error: JAVA_HOME is not defined correctly.
We cannot execute /usr/java/jdk1.7.0_05/bin/java

क्या आप मुझे बता सकते हैं कि मुझे कौन सी फाइलों को रूट के साथ-साथ रूट उपयोगकर्ता के लिए संशोधित करने की आवश्यकता है और वास्तव में जावा कहां स्थित है?

जवाबों:


353
  1. find /usr/lib/jvm/java-1.x.x-openjdk
  2. vim /etc/profile

    यदि कोई विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में लॉग इन करता है, तो sudo को प्रीपेन्ड करें। sudo vim

  3. इन्सर्ट मोड में आने के लिए 'i' दबाएं
  4. जोड़ें:

    export JAVA_HOME="path that you found"
    
    export PATH=$JAVA_HOME/bin:$PATH
  5. लॉगआउट करें और फिर से लॉगिन करें, रिबूट करें या source /etc/profileअपने वर्तमान शेल में तुरंत परिवर्तन लागू करने के लिए उपयोग करें

29
दोहरे उद्धरण चिह्नों को हटाना और उन्हें अपने कीबोर्ड से दोबारा बनाना न भूलें, क्योंकि केवल कॉपी करना और चिपकाना परेशानी पैदा कर सकता है।
सुनील कुमार

12
कुछ अनुप्रयोगों पर @rbaleksandar निर्भर JAVA_HOMEकरता है, इसे स्थापित करने में भी चोट नहीं लगती है।
रफियन

2
इंटेलीज एक ऐसा अनुप्रयोग है - और नाबालिग नहीं।
पीट

12
source /etc/profileपरिवर्तनों को तुरंत प्रभाव में लाने के लिए आपको दौड़ने की आवश्यकता है!
मोहम्मद ताहिर अलरफ़ी

1
इसने मुझे सही दिशा की ओर इशारा किया। वास्तव /etc/profile.d/jdk.shमें मेरे सिस्टम में एक बासी तैर रहा था।
हरमन

109

सभी उपयोगकर्ताओं के लिए, मैं निम्नलिखित पंक्ति को अंदर रखने की सलाह दूंगा /etc/profile

export JAVA_HOME=$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")

यह गतिशील रूप से अपडेट होगा और वैकल्पिक प्रणाली के साथ अच्छी तरह से काम करेगा । हालांकि ध्यान दें कि अपडेट केवल एक नए लॉगिन शेल में होगा।


10
केवल सादे JRE (यहां तक ​​कि बिना सिर के) के साथ अनुपालन करने के लिए उपयोग करें export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:/bin/java::")- ध्यान दें कि मैं सिर्फ उपयोग करता हूं java, नहींjavac
रोमन क्रुग्लोव

@occulta कम से कम मावेन JAVA_HOME से एक JDK की ओर इशारा करने की अपेक्षा करता है और जावा कंपाइलर का पता लगाने के लिए इसका उपयोग करता है।
Eero Aaltonen

1
readlinkसंगत समाधान के लिए अद्यतन करें / अपग्रेड करें, यहां तक ​​कि यह 5 साल पुराना धागा भी है। मैं केवल सलाह देता हूं कि आप संपादित / आदि / प्रोफाइल न करें, लेकिन अपने निर्यात को कस्टम फ़ाइल के अंदर रखें, उदाहरण के लिए /etc/profile.d/java_environment.sh, शायद आपको chmod +x java_environment.shरिबूट करना होगा।
क्रिस्टोफ

उत्तम। मेरे dirnameभद्दे हल से बेहतर है । यदि आप मेरे जैसे हैं और समझना चाहते हैं कि यहाँ क्या हो रहा है, तो यह खाली स्ट्रिंग के साथ इनपुट से मेल खाने वाले टेक्स्ट का एक सरल प्रतिस्थापन है। प्रतिस्थापन के लिए "डिफ़ॉल्ट" चरित्र है /, लेकिन जब तक आप सुसंगत हैं, आप /कुछ भी बदल सकते हैं । इस मामले में यह कॉलन है क्योंकि हम /पथ विभाजकों के लिए उपयोग करते हैं।
अनगेहेउर

35

आप / etc / प्रोफाइल का उपयोग कर सकते हैं या बेहतर फ़ाइल जैसे /etc/profile.d/jdk_home.sh

export JAVA_HOME=/usr/java/jdk1.7.0_05/

आपको यह याद रखना होगा कि यह फ़ाइल केवल नए लॉगिन शेल के साथ भरी हुई है .. इसलिए बैश-एल या नए सूक्ति-सत्र के बाद और यह नए जावा संस्करणों के साथ नहीं बदलती है।


1
कम से कम मेरे linux (raspbian), / etc / profile में स्रोत होगा /etc/profile.d/*.shताकि आपकी फ़ाइल को कॉल करने की आवश्यकता हो, jdk_home.shताकि यह
खट्टा

धन्यवाद @ हेलिकस :-) मैंने इसे तदनुसार बदल दिया।
flob

2
धन्यवाद। मैंने दोनों दुनिया के सर्वश्रेष्ठ के लिए आपके और @ ईरो के उत्तर का मिश्रण किया;)
हिलीकस

1
यह सबसे अच्छा जवाब है
जैकब

/etc/profile.d/jdk_home.shबहुत अधिक साफ जवाब है, के लिए कम से कम उबंटू , /etc/profileइतना तर्क के साथ पहले से ही clumped है। उस पर और अधिक जोड़ना समझदारी नहीं थी ...
Ng Sek Long

30

अन्य उत्तर में से कोई भी कर रहे थे मेरे लिए "चिपका" RHEL 7 में, यहां तक कि स्थापित करने JAVA_HOMEऔर PATHसीधे में /etc/profileया ~/.bash_profileनहीं होगा काम। हर बार अगर मैंने जाँच करने की कोशिश की कि JAVA_HOMEक्या सेट किया गया है, तो यह खाली होगा:

$ echo $JAVA_HOME
    (<-- no output)

मुझे जो करना था वह एक स्क्रिप्ट में सेट किया गया था /etc/profile.d/jdk_home.sh:

#!/bin/sh
export JAVA_HOME=/opt/ibm/java-x86_64-60/
export PATH=$JAVA_HOME/bin:$PATH

मैंने शुरू में पहली पंक्ति ( #!/bin/sh) की उपेक्षा की , और यह इसके बिना काम नहीं करेगा।

अब यह काम कर रहा है:

$ echo $JAVA_HOME
/opt/ibm/java-x86_64-60/

मुझे आरएचईएल 7 पर समान अनुभव था। मैंने निर्यात को ~ / .bash_profile से हटा दिया और इस दृष्टिकोण का उपयोग किया।
xpagesbeast

# /! बिन / श की आपके jdk_home.sh में आवश्यकता नहीं है। एक बार जब आप कॉन्फ़िगरेशन कर
लेते हैं तो

12

लिनक्स में एक रास्ता तय करना बहुत आसान है। निम्नानुसार करें:

चरण -1 ओपन टर्मिनल और प्रकार sudo gedit .bashrc

स्टेप -2 यह आपसे आपका पासवर्ड पूछेगा। पासवर्ड टाइप करने के बाद, यह bash फाइल को खोलेगा। फिर अंत में जाएं और नीचे टाइप करें

चरण 3

   export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"
   export PATH=$PATH:$JAVA_HOME/bin

स्टेप -4 फिर फाइल को सेव करें और फाइल से बाहर निकलें

ऊपर एकल उपयोगकर्ता के लिए है। सभी उपयोगकर्ताओं के लिए, आपको नीचे दिए गए चरणों का पालन करना होगा

चरण 1 gedit /etc/profile

चरण 2 export JAVA_HOME="/usr/lib/jvm/java-8-openjdk-amd64/"

चरण 3 export PATH=$PATH:$JAVA_HOME/bin

उम्मीद है की यह मदद करेगा। धन्यवाद!


2
यह उत्तर केवल वर्तमान उपयोगकर्ता के लिए सेट करता है।
मैनुएल मैनहार्ट

साभार @ickyrr
PyDevSRS

7

ओरेकल क्या करता है (एक पूर्व सूर्य कर्मचारी के रूप में मैं उस एक के लिए इस्तेमाल नहीं कर सकता)

ln -s latestJavaRelease / usr / जावा / डिफ़ॉल्ट
जहां latestJavaRelease वह संस्करण है जिसका उपयोग करना चाहते हैं

फिर JAVA_HOME = / usr / java / default निर्यात करें


6

उत्तर दिया गया है कि पिछले पोस्ट मान्य हैं। लेकिन एक भी जवाब सम्मान के साथ पूरा नहीं हुआ:

  1. / Etc / प्रोफ़ाइल को बदलने का केवल कारण के कारण अनुशंसित नहीं है (जैसा कि / etc / प्रोफ़ाइल में बताया गया है):
  • जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं, इस फ़ाइल को बदलना अच्छा नहीं है। अपने वातावरण में कस्टम परिवर्तन करने के लिए /etc/profile.d/ में custom.sh शेल स्क्रिप्ट बनाना बेहतर है, क्योंकि यह भविष्य के अपडेट में विलय की आवश्यकता को रोक देगा। *
  1. इसलिए जैसा कि ऊपर कहा गया है कि कस्टम परिवर्तन के लिए /etc/profile.d/custom.sh फ़ाइल बनाएं।

  2. अब, हमेशा स्थापित किए जा रहे जावा के नए संस्करणों के साथ अद्यतन रखने के लिए, पूर्ण पथ कभी न डालें, इसके बजाय उपयोग करें:

#if jdk को जावा होम के रूप में बनाना

निर्यात JAVA_HOME = $ (readlink -f / usr / bin / javac | sed "s: / bin / javac ::")

या

# जै को घर के रूप में बनाना

निर्यात JAVA_HOME = $ (readlink -f / usr / bin / java | sed "s: / bin / java ::")

  1. और याद रखना #! custom.sh फ़ाइल पर / बिन / बैश

4

आपके द्वारा स्थापित बिन फ़ाइल पथ की प्रतिलिपि बनाएँ

YOUR PATH

निम्नलिखित कमांड टाइप करके ओपन टर्मिनल और एडिट एनवायरमेंट फाइल,

sudo nano /etc/environment

इस फ़ाइल में, निम्न पंक्ति ( YOUR_PATHसिर्फ कॉपी किए गए पथ द्वारा प्रतिस्थापित ) जोड़ें:

JAVA_HOME="YOUR_PATH"

यह पर्यावरण चर सेट करने के लिए पर्याप्त होना चाहिए। अब इस फ़ाइल को पुनः लोड करें:

source /etc/environment

अब इसे निष्पादित करके परीक्षण करें:

echo $JAVA_HOME

3
जैतून का प्रभाव वर्तमान टर्मिनल सत्र
फतह काम्पर

@ FatihTürker अपने पीसी
जैक गिफिन

मेरे लिए jdk11 का उपयोग करते हुए, आपका_पथ है/usr/lib/jvm/default-java/
जैक गिफिन

JAVA_HOME पथ सेट है, लेकिन यह काम नहीं करता है। यानी जावा काम नहीं करता है। रिबूट के बाद भी
सेसियोनजो

2

लिनक्स पर मैं इस लाइन को अपने ~ / .profile में जोड़ता हूं:

export JAVA_HOME=$(readlink -ze /usr/bin/javac | xargs -0 dirname -z | xargs -0 dirname)

2
यह एक संभावित सही उत्तर लगता है लेकिन क्या आप बता सकते हैं कि यह क्यों काम करता है, यानी यह क्या करता है और ओपी की समस्या क्या है? इसके अलावा, आप "लिनक्स पर" कहते हैं, लेकिन कई अलग-अलग लिनक्स डिस्ट्रो हैं और यह उन सभी के लिए काम नहीं कर सकता है, कृपया इस काम को किस डिस्ट्रो के लिए जोड़ें।
बूर्मन

2

चरण 1 - "जावा $ जाव_हो" द्वारा वर्तमान जावा संस्करण की जाँच करें

चरण 2 - vim / etc / प्रोफाइल

चरण 3 - फ़ाइल के अंत में आपको निर्यात JAVA_HOME मिलेगा, हमें यहां नया पथ प्रदान करने की आवश्यकता है, सुनिश्चित करें कि यह सापेक्ष नहीं है।

चरण 4 - सहेजें और बाहर निकलें: wq

चरण 5 - "स्रोत / आदि / प्रोफाइल /", यह परिवर्तन को निष्पादित करेगा

चरण 6 - फिर से एक गूंज $ JAVA_HOME करें - परिवर्तन परिलक्षित होता।


2

1 ... टर्मिनल खोलने के लिए शॉर्ट कट Ctlr+ Alt+ का उपयोग करनाT

2 ... नीचे दिए गए आदेश का पालन करें:

echo export JAVA_HOME='$(readlink -f /usr/bin/javac | sed "s:/bin/javac::")' | sudo tee /etc/profile.d/jdk_home.sh > /dev/null

3 ... (अनुशंसित) अपने वीएम / कंप्यूटर को पुनरारंभ करें। यदि आप source /etc/sourceकंप्यूटर को पुनरारंभ नहीं करना चाहते हैं तो आप इसका उपयोग कर सकते हैं

4 ... टर्मिनल खोलने के लिए शॉर्ट कट Ctlr+ Alt+ का उपयोग करनाT

5 ... सत्यापित JAVA_HOME के ​​साथ किस्त

echo $JAVA_HOME

फ्लो से वन-लाइनर कॉपी , उन्हें क्रेडिट



1

संभवतः एक अच्छा विचार स्रोत के लिए जो भी प्रोफाइल आप संपादित करते हैं वह एक ताज़ा लॉगिन का उपयोग करने के लिए सहेजता है।

या तो: स्रोत / आदि / या। /आदि/

आपने जो भी प्रोफ़ाइल संपादित की है, वह कहां है।


1

जब हम JAVA_HOME सेट करने के लिए तैयार हैं, तो मुझे JAVA_HOME या किसी अन्य पर्यावरण चर सेट करने के कुछ लाभों को साझा करने दें:

1) अपने एप्लिकेशन स्टार्टअप और कॉन्फिग फ़ाइल को प्रभावित किए बिना JDK को अपग्रेड करना आसान है जो JAVA_HOME को इंगित करता है। आपको बस नए संस्करण को डाउनलोड करने और जावा के नए संस्करण के लिए अपने JAVA_HOME अंक बनाने की आवश्यकता है। यह पर्यावरण चर या लिंक का उपयोग करने का सबसे अच्छा लाभ है।

2) JDA_HOME वैरिएबल छोटा है और JDK इंस्टॉलेशन डायरेक्टरी के पूर्ण पथ के बजाय संक्षिप्त है।

3) JAVA_HOME वैरिएबल स्वतंत्रता है अर्थात यदि आपकी स्टार्टअप स्क्रिप्ट JAVA_HOME का उपयोग करती है तो यह बिना किसी संशोधन के Windows और UNIX पर चल सकती है, आपको बस संबंधित ऑपरेटिंग सिस्टम पर JAVA_HOME सेट करना होगा।

और पढ़ें: http://javarevisited.blogspot.com/2012/02/how-to-set-javahome-environment-in.html#ixzz4BWmaYIjH


1

यह समस्या को हल करने के लिए एक बहुत ही सरल स्क्रिप्ट है

export JAVA_HOME_BIN=`which java`
export JAVA_HOME_DIR=`dirname $JAVA_HOME_BIN`
export JAVA_HOME=`dirname $JAVA_HOME_DIR`

और परीक्षण के लिए:

echo $JAVA_HOME

1

उत्तर के रूप में पोस्ट करना, क्योंकि मेरे पास टिप्पणी करने का विशेषाधिकार नहीं है।

ध्यान दें : "द डेव गाइ" द्वारा पोस्ट किए गए स्वीकृत उत्तर का पालन करें।

चर सेट करने के बाद, सुनिश्चित करें कि आपने जावा निर्देशिका के लिए उपयुक्त अनुमतियाँ सेट की हैं जहाँ यह स्थापित है।

chmod -R 755 /usr/java

1

सभी ऑपरेशनल स्टेप्स (जावा, पैरेंट डीआईआर, एडिटिंग फाइल, ...) एक समाधान

zFileProfile="/etc/profile"
zJavaHomePath=$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)
echo $zJavaHomePath

echo "export JAVA_HOME=\"${zJavaHomePath}\"" >> $zFileProfile
echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> $zFileProfile

परिणाम:

# tail -2 $zFileProfile
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"
export PATH=$PATH:$JAVA_HOME/bin

स्पष्टीकरण:

1) चलो पूरी कमांड को टुकड़ों में तोड़ते हैं

$(readlink -ze $(which java) | xargs -0 dirname | xargs -0 dirname)

2) जावा कमांड से जावा पथ का पता लगाएं

# $(which java)
"/usr/bin/java"

3) प्रतीकात्मक पथ से सापेक्ष पथ प्राप्त करें

# readlink -ze /usr/bin/java
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java"

4) मूल मार्ग प्राप्त करें /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/java

# readlink -ze /usr/bin/java | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin"

5) के मूल पथ जाओ /usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64/bin/

# readlink -ze /usr/bin/java | xargs -0 dirname | xargs -0 dirname
"/usr/lib/jvm/java-11-openjdk-11.0.7.10-1.el8_1.x86_64"


0

लिखने के लिए sudo के साथ kafka-run-class.sh खोलें

आप अपने काफ्का फ़ोल्डर में kafka-run-class.sh पा सकते हैं : kafka / bin / kafka-run-class.sh

इन पंक्तियों के लिए जाँच करें

यहां छवि विवरण दर्ज करें

अपने जावा / बिन में जावा निष्पादन योग्य को इंगित करने के लिए दूसरे भाग में जावा चर को संशोधित करें। जावा की तरह = "$ JAVA_HOME / जावा"


0

/ Etc / प्रोफाइल में, यदि आप खोलते हैं तो आपको पता चल जाएगा कि IT ने उस फ़ाइल पर लिखने की सिफारिश नहीं की है। इसके बजाय अपने कमांड की एक स्क्रिप्ट बनाएं (मान लीजिए test.sh) /etc/profile.d फ़ोल्डर में जाएं और वहां test.sh लगाएं। हर बार जब आप रिबूट करते हैं तो यह स्वचालित रूप से / etc / प्रोफाइल द्वारा कॉल किया जाएगा।


-1

मैं लाइन का उपयोग करता हूं:

export JAVA_HOME=$(readlink -f $(dirname $(readlink -f $(which java) ))/../)

मेरे ~ / .profile करने के लिए तो यह लॉगिन समय पर डिफ़ॉल्ट जावा निर्देशिका के आधार का उपयोग करता है। यह बैश के लिए है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.