लिनक्स OpenJDK डेबियन-आधारित वितरण के लिए JAVA_HOME पर्यावरण चर के लिए सही लक्ष्य क्या है?


90

विंडोज में, JAVA_HOMEJDK इंस्टॉलेशन फोल्डर को इंगित करना चाहिए (ताकि JAVA_HOME/binसभी निष्पादक और JAVA_HOME/libsसभी डिफ़ॉल्ट jarलाइब्रेरी शामिल हों)।

अगर मैं Sun का JDK बंडल डाउनलोड करता हूं और इसे लिनक्स में स्थापित करता हूं, तो यह वही प्रक्रिया है।

हालांकि, मुझे कुबंटू के डिफ़ॉल्ट ओपनजेडके पैकेज का उपयोग करने की आवश्यकता है। समस्या यह है कि सभी निष्पादन योग्य को रखा गया है /usr/bin। लेकिन जार में रखा जाता है /usr/share/java। चूंकि वे एक ही JAVA_HOMEफ़ोल्डर में नहीं हैं, इसलिए मुझे ग्रिल्स से परेशानी हो रही है और हो सकता है कि मानक जावा संरचना की अपेक्षा करने वाले अन्य अनुप्रयोगों के साथ परेशानी हो।

  1. अगर मैं उपयोग करता हूं:

    JAVA_HOME=/usr
    

    सभी एप्लिकेशन और स्क्रिप्ट जो किसी जावा निष्पादन योग्य का उपयोग करना चाहते हैं, मानक प्रक्रिया का उपयोग कर सकते हैं call $JAVA_HOME/bin/executable। हालांकि, चूंकि जार एक अलग स्थान पर हैं, इसलिए वे हमेशा नहीं पाए जाते हैं (उदाहरण के लिए: अनाज में जो मुझे मिल रहा ClassDefNotFoundहै native2ascii)।

  2. दूसरी ओर, अगर मैं उपयोग करता हूं:

    JAVA_HOME=/usr/share/java
    

    जावा निष्पादनयोग्य ( javaऔर javac, आदि) में से कोई भी नहीं पाया जा सकता है।

तो, JAVA_HOMEडेबियन-आधारित लिनक्स में चर को संभालने का सही तरीका क्या है ?

आपकी मदद के लिए धन्यवाद, लुइस

जवाबों:


97

आखिरकार मेरे लिए क्या काम किया (ग्रेल्स अब आसानी से काम करता है) लगभग ऐसा कर रहा है जैसे स्टीव बी ने बताया है:

JAVA_HOME=/usr/lib/jvm/default-java

इस तरह यदि उपयोगकर्ता सिस्टम के लिए डिफ़ॉल्ट JDK को बदलता है, तब JAVA_HOMEभी काम करता है।

default-java वर्तमान जेवीएम के लिए एक सहानुभूति है।


6
ऐसा लगता है कि डेबियन 7 पर ऐसा कोई लिंक नहीं है
a1an

3
RHEL5.10 पर, यह / usr / lib / jvm / java है
ब्रायन

1
मैंने / usr / lib / jvm / java-j-7-openjdk-amd64
Randall Bohn

Oracle Linux 7 (यह CentOS और RHEL पर लागू होना चाहिए ) के लिए, मैंने /etc/profile.d/java.sh नामक एक फाइल बनाई और इसे निम्नलिखित के साथ पॉपुलेट किया: JAVA_HOME = / usr / lib / jv / jre-openjdk export JAVA_HOME पुन: सोर्सिंग / आदि / प्रोफाइल (स्रोत / आदि / प्रोफाइल चलाकर) के बाद JAVA_HOME अपेक्षित रूप से आबाद था।
darnold0714

79

यदि आप कई जावा संस्करणों को प्रबंधित करने के लिए विकल्पों का उपयोग करते हैं, तो आप JAVA_HOMEसिमिलिंक किए गए जावा (या जेवैक) के आधार पर इसे जैसे सेट कर सकते हैं :

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

3
यह मेरे लिए काम करता है: JAVA_HOME = $ (readlink -f / usr / bin / java। Sed "s: / jre / bin / java ::")
dpnsan

4
शानदार समाधान, JAVA_HOME के ​​साथ मेरे वर्षों के लंबे सिरदर्द को हल करता है, जो विभिन्न ऑपरेटिंग सिस्टम पर अलग-अलग स्थानों को इंगित करता है।
डेटागेक

3
ध्यान दें कि यह चतुर समाधान Gentoo की तरह डिस्ट्रोस पर काम नहीं करेगा जो /usr/bin/javaएक स्क्रिप्ट ( /usr/libexec/eselect-java/run-java-tool.bash) की ओर इशारा करता है । फिर भी, यह एक अच्छा तरीका है। केवल एक चीज जिसे मैं sedJAVA_HOME=$( j=$( readlink -f /usr/bin/java ) ; echo ${j%%/bin/java} )
बदलूंगा

यह अच्छी तरह से काम करता है :) हर कोई JDK स्थापित नहीं javacहोने के javaकारण बदलना चाह सकता है; केवल JRE
Hanxue

1
@AlexisWilke अब जावा की जगह जावा
bassassssiiee

6

मानक Ubuntu स्थापित करने के लिए विभिन्न जावा संस्करणों में डाल दिया लगता है /usr/lib/jvmjavac, जावा अपने रास्ते में आप पाते हैं यह करने के लिए सॉफ्टलिंक होगा।

जब तक आप JAVA_HOMEपर्यावरण चर सेट करते हैं, तब तक अपने जावा संस्करण को स्थापित करने के साथ कोई समस्या नहीं है, जब तक कि आप binअपने पथ पर नए जावा को सुनिश्चित नहीं करते हैं।

ऐसा करने का एक सरल तरीका यह है कि जावा होम का सॉफ्टलिंक के रूप में अस्तित्व है, ताकि यदि आप संस्करणों को अपग्रेड या स्विच करना चाहते हैं, तो आपको केवल उस निर्देशिका को बदलना होगा जो यह इंगित करती है - उदा:

/usr/bin/java --> /opt/jdk/bin/java,

/opt/jdk --> /opt/jdk1.6.011

डेबियन के साथ उबंटू समाधान की सिफारिश करना खतरनाक है। वे अलग-अलग कर सकते हैं।
रिचीहएच

4
ध्यान दें अनुरोधकर्ता ने कहा कि उसने कुबंटू का उपयोग किया है, इसलिए उबंटू समाधान ठीक होना चाहिए।
जोसेफ होल्स्टन

0

मेरे पास आमतौर पर कोई JAVA_HOME पर्यावरण चर नहीं है। जावा इसे स्वयं सेट कर सकता है। जावा java.home सिस्टम गुण के अंदर उपलब्ध होना चाहिए।


मेरे पास आमतौर पर यह नहीं है। हालांकि, अगर मैं इसे स्थापित नहीं करता हूं, तो कब्र की शिकायत है कि JAVA_HOME नहीं है और गर्भपात नहीं करता है।
लुइस सोइरो

चींटी को इसे डेबियन में भी रखने की आवश्यकता है जो कि संदर्भ है
रिचीएचएच


0

जहाँ तक मुझे याद है, मैंने अद्यतन-विकल्प के बजाय अद्यतन-जावा-विकल्प स्क्रिप्ट का उपयोग किया। और इसने मेरे लिए JAVA_HOME को सही ढंग से सेट किया।


0

यदि आपके पास JAR फ़ाइलों के साथ समस्याएँ नहीं हैं, तो मैं यह सुनिश्चित करूँगा कि उन फ़ाइलों के स्थान को शामिल करने के लिए आपका CLASSPATH सेट है। हालाँकि मुझे लगता है कि CLASSPATH को अक्सर अलग-अलग कार्यक्रमों के लिए अलग-अलग सेट करने की आवश्यकता होती है और अक्सर व्यक्तिगत कार्यक्रमों के लिए विशिष्ट सेट करने के लिए कुछ समाप्त होता है।


0

अद्यतित उत्तर जो आपकी समस्या को हल करेगा और उबंटू पर ओरेकल जावा 7 को स्थापित करने के लिए एक सामान्य अच्छा तरीका भी है, यहां पाया जा सकता है: http://www.wikihow.com/Install-Oracle-Java-on-Ubuntu-Linux


0

मैं Ubuntu में Openjdk-6-jre और openjdk-6-jre-headless संकुल के साथ समान समस्याओं की खोज कर चुका हूँ।

Openjdk-6-jre और openjdk-6-jre-headless संकुल को शुद्ध करके और पुनः स्थापित करके मेरी समस्या का समाधान किया गया। विकल्प केवल Openjdk-6-jre और Openjdk-6-jre-headless पैकेज की एक ताज़ा स्थापना पर अपडेट किए जाते हैं।

नीचे purging के बाद स्थापित करने का एक नमूना है:

aptitude purge openjdk-6-jre openjdk-6-jre-headless # to ensure no configuration exists
aptitude install --without-recommends openjdk-6-jre # Installing without some extras
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
  ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a}
  openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a}
The following packages are RECOMMENDED but will NOT be installed:
  icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra
0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded.
Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Selecting previously deselected package openjdk-6-jre-lib.
(Reading database ... 62267 files and directories currently installed.)
Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ...
...
Processing triggers for man-db ...
Setting up tzdata-java (2012e-0ubuntu0.10.04) ...
...
Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ...
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/java to provide /usr/bin/java (java) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/keytool to provide /usr/bin/keytool (keytool) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/pack200 to provide /usr/bin/pack200 (pack200) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmid to provide /usr/bin/rmid (rmid) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/rmiregistry to provide /usr/bin/rmiregistry (rmiregistry) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/unpack200 to provide /usr/bin/unpack200 (unpack200) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/orbd to provide /usr/bin/orbd (orbd) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/servertool to provide /usr/bin/servertool (servertool) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/tnameserv to provide /usr/bin/tnameserv (tnameserv) in auto mode.
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/lib/jexec to provide /usr/bin/jexec (jexec) in auto mode.
Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ...
update-alternatives: using /usr/lib/jvm/java-6-openjdk/jre/bin/policytool to provide /usr/bin/policytool (policytool) in auto mode.
...

आप ऊपर देख सकते हैं update-alternatives विभिन्न जावा बायनेरिज़ के लिए लिंक स्थापित करने के लिए चलाया जाता है।

इस इंस्टॉल के बाद, प्रत्येक बाइनरी के लिए /usr/binलिंक /etc/alternatives, इन और फाइल्स भी हैं /var/lib/dpkg/alternatives

ls -l /usr/bin/java /etc/alternatives/java /var/lib/dpkg/alternatives/java
lrwxrwxrwx 1 root root  40 2013-01-16 14:44 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/java
lrwxrwxrwx 1 root root  22 2013-01-16 14:44 /usr/bin/java -> /etc/alternatives/java
-rw-r--r-- 1 root root 158 2013-01-16 14:44 /var/lib/dpkg/alternatives/java

चलो इसे बिना पर्जिंग के साथ स्थापित करने के विपरीत है।

aptitude remove openjdk-6-jre
aptitude install --without-recommends openjdk-6-jre
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reading extended state information
Initializing package states... Done
The following NEW packages will be installed:
  ca-certificates-java{a} java-common{a} libavahi-client3{a} libavahi-common-data{a} libavahi-common3{a} libcups2{a} libflac8{a} libgif4{a} libnspr4-0d{a} libnss3-1d{a} libogg0{a} libpulse0{a} libsndfile1{a} libvorbis0a{a} libvorbisenc2{a} libxi6{a} libxtst6{a}
  openjdk-6-jre openjdk-6-jre-headless{a} openjdk-6-jre-lib{a} tzdata-java{a}
The following packages are RECOMMENDED but will NOT be installed:
  icedtea-6-jre-cacao icedtea-netx ttf-dejavu-extra
0 packages upgraded, 21 newly installed, 0 to remove and 119 not upgraded.
Need to get 0B/34.5MB of archives. After unpacking 97.6MB will be used.
Do you want to continue? [Y/n/?]
Writing extended state information... Done
Selecting previously deselected package openjdk-6-jre-lib.
(Reading database ... 62293 files and directories currently installed.)
Unpacking openjdk-6-jre-lib (from .../openjdk-6-jre-lib_6b24-1.11.5-0ubuntu1~10.04.2_all.deb) ...
...
Processing triggers for man-db ...
...
Setting up openjdk-6-jre-headless (6b24-1.11.5-0ubuntu1~10.04.2) ...

Setting up openjdk-6-jre (6b24-1.11.5-0ubuntu1~10.04.2) ...
...

जैसा कि आप देखते हैं, update-alternativesट्रिगर नहीं है।

इस स्थापित के बाद, जावा बायनेरिज़ के लिए कोई फ़ाइल नहीं है /var/lib/dpkg/alternatives, कोई लिंक नहीं है /etc/alternatives, और कोई लिंक नहीं है /usr/bin

फ़ाइलों का निष्कासन /var/lib/dpkg/alternativesभी टूट जाता है update-java-alternatives



0

फेडोरा उपयोगकर्ता के लिए एक अद्यतन के रूप में, विकल्प वर्तमान जावा निर्देशिका को / usr / जावा / डिफ़ॉल्ट पर सेट करते हैं

इसलिए आपको अपना JAVA_HOME / usr / java / डिफ़ॉल्ट सेट करना होगा ताकि आपके क्लासपाथ में हमेशा विकल्प के लिए उत्सुकता से चयन हो सके

HTH!


0

मैं हमेशा के अनुसार JAVA_HOME सेट करता हूं /usr/bin/java

JAVA_HOME="$(dirname -- "$(dirname -- "$(readlink -f /usr/bin/java)")")"

इस तरह, दोनों विकल्प एक ही स्थान की ओर इशारा करते हैं


-1

कृपया देखें कि अद्यतन-विकल्प कमांड क्या करता है (इसमें एक अच्छा आदमी है ...)।

शीघ्र ही - क्या होता है जब आपके पास जावा-सन -४.४ और जावा-ओपनोसे -१० ... जो "जावा" लेता है? यह डेबियन "/ usr / बिन / जावा" प्रतीकात्मक लिंक है और "/usr /bin/java-sun-1.4" "/ usr / बिन / जावा" का एक विकल्प है

संपादित करें: जैसा कि रिचर्ड ने कहा, update-alternativesपर्याप्त नहीं है। आपको वास्तव में उपयोग करने की आवश्यकता है update-java-alternatives। अधिक जानकारी पर:

https://help.ubuntu.com/community/Java


अद्यतन-विकल्प पर्याप्त नहीं है। इसे अपडेट-जावा-विकल्प की आवश्यकता है
रिचीएचएच

@ रिचर्ड: हाँ, विख्यात। पहली बार जब मैंने इसके बारे में सोचा तो मैंने गुगली की, और उबंटू का प्रलेखन पाया। धन्यवाद!
elcuco

-2

मेरा सही लक्ष्य हमेशा इसे सूर्य से डाउनलोड करना है और बस इसे उसी तरह स्थापित करना है। तब आप जानते हैं कि सब कुछ किस निर्देशिका में जाता है।

लेकिन अगर आप उस अजीब तरीके से चिपकना पसंद करते हैं जो डेबियन इसे स्थापित करता है, तो मेरा सबसे अच्छा अनुमान है कि माता-पिता की निर्देशिका वही होगी जहां जावा और जेवैक बायनेरिज़ स्थित हैं।

(जब से आप इसे अपने रास्ते में निर्दिष्ट करते हैं यह $ JAVA_HOME / बिन है) (तो आपके मामले में यह होगा ... $ JAVA_HOME / शेयर और $ JAVA_HOME / usr होगा?)

एह, यह सही नहीं लगता ...

मुझे इसका उत्तर सुनने में दिलचस्पी है!


डेबियन का उपयोग करते समय आपको वास्तव में डेबियन संरचनाओं के साथ रखने की आवश्यकता होती है या बाद में सिस्टम अपडेट आपको एक टूटी हुई प्रणाली के साथ छोड़ देगा।
रिचीहएच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.