Java-Version pro Sitzung umschalten


7

Ich habe eine Kombination aus Java7 und Java8 auf meinem 14.04-Computer installiert.

Wenn ich zwischen ihnen wechseln möchte, mache ich eine sudo update-alternatives --config java. Wenn Sie es jedoch auf diese Weise ändern, wird die aktuelle Java-Version auf allen Terminals geändert. Ich wollte es nur für das aktuelle Terminal ändern. Zum Beispiel möchte ich Java-Code, der in 1.7 geschrieben wurde, mit anderem Code testen, der in 1.8 kompiliert wurde.

Eine andere Alternative wäre so etwas zu tun

function java_use() {
   export JAVA_HOME=$(/usr/libexec/java_home -v $1)
   export PATH=$JAVA_HOME/bin:$PATH
   java -version
}

Aber das funktioniert nur auf meinem Mac und ich wollte etwas saubereres, ohne es PATHjedes Mal ändern zu müssen . Vielleicht mit chroot?

Wie kann ich meine Java-Version "sauber" ändern - vorzugsweise nur zwischen den installierten Versionen - und nur für die aktuelle Terminalsitzung?


Es gibt einen ausgezeichneten Blog- Beitrag , der genau beschreibt, wonach Sie suchen!
Ron

Antworten:


5

Wenn Sie sich das ansehen /usr/sbin/update-java-alternatives, werden Sie sehen, dass es iteriert /usr/lib/jvm/.*.jinfo, um die installierten Versionen zu finden, sodass Sie dasselbe tun können, um die installierten Versionen zu erkennen.

Wenn Sie nicht PATHjedes Mal Änderungen PATHvornehmen möchten , können Sie Bash vollständig umgehen, indem Sie dem eingebauten hashBefehl (run help hash) mitteilen, welche Binärdatei für Java verwendet werden soll .

Hier ist etwas, worauf Sie aufbauen können:

java_use() {
    local file version versions=()
    for file in /usr/lib/jvm/.*.jinfo; do
        [[ -e $file ]] || continue
        version=${file##*/.} version=${version%.jinfo}
        versions+=("$version")
    done
    if (( ${#versions[@]} == 0 )); then
        printf >&2 'No java installed\n'
        return 1
    fi
    select version in "${versions[@]}"; do
        if [[ -n $version ]]; then
            export JAVA_HOME="/usr/lib/jvm/$version"
            hash -p "$JAVA_HOME/bin/java" java
            break
        fi
    done
    type java
}

genial. Was wäre die Kirsche an der Spitze: Wenn sie zeigen würde, welche der Versionen derzeit verwendet wird (genauso wie dies der --config javaFall ist), aber so wie sie ist, verdient sie die Antwort.
Alexandre Santos

@AlexandreSantos, Sie könnten so etwas wie printf 'Currently using: '; type -P javaam Anfang der Funktion setzen
Geirha

Dies ist eine der besten und nützlichsten Antworten, die ich bei Stack Overflow gesehen habe. Tolle Hilfe, vielen Dank!
Per Lundberg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.