Verwenden Sie eine andere Java-Version, um zwei Programme auszuführen


8

Ich habe zwei JAVA JREs auf meinem neuen CentOS installiert, da Cassandra Java7u25 oder höher benötigt, während iReport mit 1.6 arbeiten muss.

Wie starte ich nun jedes Programm über die Befehlszeile und sage jedem Programm, welche Version verwendet werden soll?

Muss ich die /etc/profileDatei ändern ? Wenn das so ist, wie?


Ich habe Java nicht installiert ... aber haben Sie versucht (wenn Sie beide Versionen von Java installiert haben), können Sie sie wahrscheinlich wie Java6 path/to/iReportund Java7 path/to/Cassandraoder unter Angabe eines vollständigen Pfads zur ausführbaren Java-Datei ausführen/path/to/Java
Alko

Antworten:


7

Es macht keinen Sinn, beide zu haben, $PATHweil sich nur einer daran gewöhnt. Sie könnten einen mit einem anderen Namen verknüpfen - z. B. java6- ich habe dieses W / Java noch nie ausprobiert und bin mir nicht sicher, ob es funktionieren würde.

Der beste Weg, dies zu tun, wäre, einen von ihnen (vermutlich 1.6) an einem Ort wie zu installieren /opt/java6, wobei 1.7 als Standard verbleibt. Wenn Sie dann 6 verwenden möchten:

export PATH=/opt/java6/bin:$PATH

Und starten Sie es über die Befehlszeile. Sie können das alles auch in einem Skript zusammenfassen. Versuchen Sie danach nicht, Cassandra von derselben Shell aus auszuführen, es sei denn, Sie entfernen diese aus $PATH(einfache Möglichkeit, dies zu überprüfen echo $PATH).

So automatisieren Sie dies für eine bestimmte Anwendung:

#!/bin/sh

export PATH=/opt/java6/bin:$PATH
exec /path/to/application

Sie können das dann irgendwo in das reguläre $PATH(z. B. /usr/local/bin) einfügen, sicherstellen, dass es ausführbar ist ( chmod 755 whatever.sh) und die Anwendung auf diese Weise starten. Dies wirkt sich dann nicht auf $PATHden Prozess aus, der es startet.


Ich verstehe nicht, warum Sie die dritte Shell öffnen müssten. Sie möchten nur den Pfad im zweiten (via export) ändern und dann iReport starten. Die Verwendung von zwei separaten Registerkarten in einem GUI-Terminal funktioniert hierfür. Ich habe in dem, was ich mit "dies in ein Skript einfügen" meinte, bearbeitet, wenn Sie das tun möchten.
Goldlöckchen

RHEL8 empfiehlt, JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk yourprogramaber ich habe Schwierigkeiten damit auf Debian.
Max Power

Ich weiß, dass das Standard-Java mit geändert werden kann, update-alternatives --config javaaber Sie müssten dies jedes Mal ändern, wenn Sie zwischen Anwendungen wechseln. Der grundlegende Befehl "java" verweist nur auf eine der Versionen in / usr / libs / jvm. Wenn Sie eine Java-Quelle anstelle eines vorkompilierten Bytecodes erhalten haben, müssen Sie möglicherweise auch ändern, javacwelche Java kompiliert wird.
Max Power

0

Dies funktioniert sowohl beim Starten von einem Terminalemulator als auch von einem Desktop-Symbolstarter für ein Programm, das mit meinem Standard-OpenJRE-11 nicht ausgeführt werden kann. Verwenden von Debian-10 Buster mit XFCE

/bin/sh -c 'JAVA_HOME=/usr/lib/jvm/java-8-oracle/ PATH=$JAVA_HOME/bin/:$PATH /home/username/myapplication' Könnte auch versuchen: JAVA_HOME=/usr/lib/jvm/java-8-oracle/ PATH=$JAVA_HOME/bin/:$PATH /home/username/myapplication

Sie können auch einen Alias ​​für jede Java-Version erstellen, sodass etwas Kurzes wie j8o = /bin/sh -c 'JAVA_HOME=/usr/lib/jvm/java-8-oracle/ PATH=$JAVA_HOME/bin/:$PATHund der letzte alltägliche Befehl lautetj8o ./myapplication

Um die Standard-Java zu ändern, update-alternatives --config javafolgen Sie der Eingabeaufforderung. Das gleiche kann verwendet werden, um bei Bedarf die Standardeinstellung für javac (den Bytecode-Compiler) festzulegen. Benötigt möglicherweise sudo, um die Standardeinstellung zu ändern.

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.