क्या जावा से संबंधित सभी विकल्पों को अपडेट करने का कोई तरीका है?


51

क्या जावा से संबंधित सभी वैकल्पिक विकल्पों पर जल्दी से स्विच करने का कोई तरीका है update-alternatives?

उदाहरण के लिए, यदि Java को 7 से अधिक पर स्विच करना है, तो मैं sudo update-alternatives --config javaजावा 7 OpenJdk को चलाता हूं और चयन करता हूं। लेकिन अगर मैं दौड़ता update-alternatives --get-selections | grep javaहूं तो मुझे निम्नलिखित मिलता है,

appletviewer                   auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/appletviewer
extcheck                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/extcheck
idlj                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/idlj
itweb-settings                 auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/itweb-settings
jar                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jar
jarsigner                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jarsigner
java                           manual   /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
javac                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javac
javadoc                        auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javadoc
javah                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javah
javap                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/javap
javaws                         auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/javaws
jconsole                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jconsole
jdb                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jdb
jexec                          auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jexec
jhat                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jhat
jinfo                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jinfo
jmap                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jmap
jps                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jps
jrunscript                     auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jrunscript
jsadebugd                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jsadebugd
jstack                         auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstack
jstat                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstat
jstatd                         auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/jstatd
keytool                        auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/keytool
native2ascii                   auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/native2ascii
orbd                           auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/orbd
pack200                        auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/pack200
policytool                     auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/policytool
rmic                           auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/rmic
rmid                           auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/rmid
rmiregistry                    auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/rmiregistry
schemagen                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/schemagen
serialver                      auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/serialver
servertool                     auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/servertool
tnameserv                      auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/tnameserv
unpack200                      auto     /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/unpack200
wsgen                          auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/wsgen
wsimport                       auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/wsimport
xjc                            auto     /usr/lib/jvm/java-6-openjdk-amd64/bin/xjc

जैसा कि आप देख सकते हैं, मेरे जावा विकल्प को 7 से अधिक पर स्विच किया गया था, लेकिन OpenJDK 6 पर आधारित हर दूसरे विकल्प को स्विच नहीं किया गया था। यकीन है कि मैं प्रत्येक को मैन्युअल रूप से स्विच कर सकता हूं या ऐसा करने के लिए एक स्क्रिप्ट लिख सकता हूं, लेकिन मुझे लगता है कि इसे पूरा करने का एक बेहतर तरीका है।

जवाबों:


70

चाल update-java-alternatives( java-commonपैकेज से) का उपयोग करना है।

तो OpenJDK 6 से 7 के लिए जाने के लिए, मैं update-java-alternatives -lजावा विकल्प की एक सूची प्राप्त करता था और फिर sudo update-java-alternatives -s java-1.7.0-openjdk-amd64JDK के लिए उपयोग किया जाता था।

नोट: ऊपर दी गई कमांड ने निम्नलिखित त्रुटियां दीं,

update-alternatives: error: no alternatives for mozilla-javaplugin.so.
update-java-alternatives: plugin alternative does not exist: /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/IcedTeaPlugin.so

ऐसा इसलिए है क्योंकि Openjdk प्लगइन डिफ़ॉल्ट रूप से स्थापित नहीं है। रन को ठीक करने के लिए

sudo apt-get install icedtea-7-plugin

और फिर से दौड़ना update-java-alternatives


8
आपको प्लगइन स्थापित करने की आवश्यकता नहीं है (और यदि आपको इसकी ज़रूरत नहीं है, तो सुरक्षा कारणों के कारण)। update-java-alternativesअन्य सभी जावा विकल्पों को बदलता है, तब भी जब प्लगइन सेटिंग एक त्रुटि फेंकता है।
डेनियल कुल्मन

Oracles JVM के साथ क्या है? मैं उसका उपयोग कैसे कर सकता हूं? और JDK विशिष्ट निष्पादनयोग्य?
कीकि

2
चल update-java-alternatives --set java-1.8.0-openjdk-amd64मेरे पास अभी भी है default-java -> /usr/lib/jvm/java-7-oracle। क्या यह no alternatives for mozilla-javaplugin.soत्रुटि के कारण है ? मैं इसे कैसे बदल सकता हूं?
lony

3

jbro ने http://ubuntuforums.org/showthread.php?t=1817528 पर एक ही सवाल पूछा और इस मुद्दे के लिए एक स्क्रिप्ट लिखी,

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print $1}')
    path=$(echo $line | awk '{print $3}')
    newpath=$(echo $path | sed -e 's/java-6-openjdk/java-6-sun/')
    status=unchanged
    if [ -f $newpath ]
    then
    status=modified
    echo "-> update-alternatives --set $alternative $newpath"
    update-alternatives --set $alternative $newpath
    else
    echo "$alternative unchanged"
    fi
done

अगर कोई बेहतर जवाब नहीं है, तो यह ठोस समाधान की तरह लगता है, लेकिन मुझे लगता है कि इसे update-alternativesसंभालने के लिए एक बेहतर तरीका होना चाहिए ।

मैंने कोड को थोड़ा संपादित किया, क्योंकि यह आपको उन्हें स्थापित करने से पहले परिवर्तन नहीं करने देता। मैंने दो और पंक्तियाँ इस प्रकार जोड़ीं ...

#!/bin/bash

update-alternatives --get-selections | grep -i openjdk |
while read line
do
    alternative=$(echo $line | awk '{print $1}')
    path=$(echo $line | awk '{print $3}')
    newpath=$(echo $path | sed -e 's/java-6-openjdk/java-6-sun/')
    status=unchanged
    if [ -f $newpath ]
    then
    status=modified
echo "-> update-alternatives --install /usr/bin/$alternative $alternative $newpath 1"
update-alternatives --install /usr/bin/$alternative $alternative $newpath 1
    echo "-> update-alternatives --set $alternative $newpath"
    update-alternatives --set $alternative $newpath
    else
    echo "$alternative unchanged"
    fi
done

1

Oracle JVM के लिए, इसे चलाएं:

sudo update-java-alternatives -s java-7-oracle

0

<TL; DR> अपडेट-जावा-विकल्प .jinfo फ़ाइल का उपयोग यह निर्धारित करने के लिए करता है कि कौन से विकल्प स्विच करने हैं, लेकिन यह भी उम्मीद है कि उन्हें अलग से कॉन्फ़िगर किया गया है।

यदि आपके डाउनलोड किए गए JRE / JDK अपडेट-जावा-विकल्प के साथ स्विच नहीं करते हैं, तो एक नई .jinfo फ़ाइल और अपडेट-वैकल्पिक प्रविष्टियां बनाएं।

[विवरण]

इसे मैन्युअल रूप से कॉन्फ़िगर करने के लिए:

  1. अपने नए jdk को मौजूदा jdk के साथ डीकोमप्रेस करें /usr/lib/jvm/

  2. एक उत्पन्न .jdkname.jinfo फ़ोल्डर में फ़ाइल .jinfo एक और दोहराने के फ़ाइल (या स्थापित एक और उबंटू से एक को पकड़ो: आप कुछ और जितना टेम्पलेट के बाद कर रहे हैं)।

    फ़ाइल नाम। jdkname .jinfo को jdk foldername से मेल खाना चाहिए।

    अपने नए इंस्टॉल से मिलान करने के लिए हेडर (नाम) और फ़ाइल पथ (प्रोग्राम एंट्री) सेट करने के लिए सामग्री को संशोधित करें।

    अपने संस्करण में छोड़े गए कार्यक्रमों के संदर्भ में किसी भी लाइन को हटा दें और नए कार्यक्रमों के लिए लाइनें जोड़ें /bin

  3. इस टेम्पलेट के साथ अब अपने .jinfo पैकेज में सभी कार्यक्रमों के लिए विकल्प बनाएँ:

    sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/**jdkname**/bin/java 100

    (कई संबंधित उत्तरों ने इसे / बिन की सामग्री से स्क्रिप्ट किया है या आप स्क्रिप्ट आदेशों को उत्पन्न करने के लिए .jinfo फ़ाइल पर regexp खोज / प्रतिस्थापित कर सकते हैं।)

    नोट 100 केवल प्राथमिकता है जिसे ऑटो फ्लैग का उपयोग करके jdk संस्करण सेट करते समय माना जाता है।

  4. जावा विकल्प की जाँच करें और JDK का उपयोग करने के लिए स्विच करें।

    update-java-alternatives -l  
    update-java-alternatives -s jdkname  

    ध्यान दें कि कुछ JDK में JRE शामिल नहीं है, इसलिए या तो इसे जोड़ें या उन jinfo प्रविष्टियों को हटा दें।

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