Mehrere Java-Versionen werden gleichzeitig unter Windows ausgeführt

81

Wir haben einige Anwendungen, die auf Java 5 ausgeführt werden, und möchten jetzt eine Anwendung auf Java 6 einführen. Können beide Java-Versionen unter Windows zusammenleben?

Gibt es ein Kontrollfeld zum Festlegen der entsprechenden Java-Version für verschiedene Anwendungen oder eine andere Möglichkeit zum Einrichten, welche Java-Version zum Ausführen dieser bestimmten Anwendung verwendet wird?

Daniel Stanca
quelle

Antworten:

60

Natürlich können Sie unter Windows mehrere Java-Versionen verwenden. Unterschiedliche Anwendungen können unterschiedliche Java-Versionen verwenden. Wie wird Ihre Bewerbung gestartet? Normalerweise haben Sie eine Batch-Datei, in der es so etwas gibt

java ...

Dadurch wird die ausführbare Java-Datei mit der Variablen PATH durchsucht. Wenn Java 5 also zuerst auf dem PATH steht, treten Probleme beim Ausführen einer Java 6-Anwendung auf. Anschließend sollten Sie die Batchdatei so ändern, dass sie eine bestimmte Java-Version verwendet, z. B. indem Sie eine Umgebungsvariable JAVA6HOMEmit dem Wert definieren C:\java\java6(wenn Java 6 in diesem Verzeichnis installiert ist) und den Aufruf der Batchdatei ändern

%JAVA6HOME%\bin\java ...
wirklich verrückt
quelle
9
Unter Windows dem Java stoppen Installer Ihre bestehenden ( zum ersten Mal installiert) Java installieren zu ersetzen, müssen Sie den STATIC = 1 Argument übergeben , dh von der Kommandozeile "jre-6u24-windows-i586-s.exe / STATIC = 1" laufen
Tom Chiverton
4
Wenn ich unter Windows 7 64 "jdk-6u27-windows-x64.exe / STATIC = 1" ausführe, wird es nicht installiert, sondern es wird nur ein Popup-Fenster angezeigt, in dem die Verwendung für msiexec angezeigt wird.
Yetimoner
7
Laut diesem Dokument von Oracle ist es tatsächlich jdk-...exe STATIC=1. Ich habe es versucht und es hat funktioniert.
Matt
1
Leute, Sie verwechseln JDK und JRE. JRE nimmt STATICals Argument, aber auch JDK?
Danijel
1
@reallyinsane Ich kann das nicht verstehen. Die Antwort ist für einen Neuling nicht vereinfacht. Können Sie mich mit einem vollständigen Tutorial verknüpfen?
CodingOnSteroid
11

Es ist absolut möglich, mehrere JRE / JDK-Versionen nebeneinander zu installieren. Darüber hinaus müssen Sie dafür nichts Besonderes tun, da Sun für jeden Ordner einen anderen Ordner erstellt (unter Programme).

Es gibt kein Bedienfeld, um zu überprüfen, welche JRE für jede Anwendung funktioniert. Grundsätzlich ist die JRE, die funktioniert, die erste in Ihrer PATH-Umgebungsvariablen. Sie können dies oder die Variable JAVA_HOME ändern oder bestimmte cmd / bat-Dateien erstellen, um die gewünschten Anwendungen mit jeweils einer anderen JRE im Pfad zu starten.

Moshe
quelle
2
Ich glaube nicht, dass dies für Windows gilt.
cmcginty
@Casey, auf welchen Teil beziehen Sie sich? Warum ist es nicht wahr?
Pacerier
1
Diese Antwort erklärt das Problem. Die Windows-Registrierung wird verwendet, um die Standardversion von Java zu finden.
Binarysubstrate
Obwohl es häufig zutrifft, dass ein Java-Programm auf einer neuen Java-Version als der, mit der es entwickelt wurde, einwandfrei ausgeführt wird, gibt es keine Garantie. Außerdem muss die Umgebungsvariable JAVA_HOME in den meisten Fällen aktualisiert werden.
Patrick O'Hara
11

Ich war entsetzt über die Ungeschicklichkeit der Ideen CLASSPATH, JAVA_HOME und PATH in Windows, um den Überblick über Java-Dateien zu behalten. Ich bin wegen mehrerer JREs hierher gekommen und wie ich damit zufrieden bin. Ohne Informationen von einem viel klügeren Mann als mir wiederzugeben, würde ich lieber auf seinen Artikel zu diesem Thema verweisen, der es für mich perfekt löst.

Artikel von: Ted Neward: Mehrere Java-Heime: Geben Sie Java-Apps ihre eigene JRE

Mit dem exponentiellen Wachstum von Java als serverseitige Entwicklungssprache ist ein exponentielles exponentielles Wachstum bei Java-Entwicklungstools, -Umgebungen, -Frameworks und -Erweiterungen einhergegangen. Leider spielen nicht alle diese Tools unter derselben Java VM-Installation gut zusammen. Einige erfordern eine Servlet 2.1-kompatible Umgebung, andere 2.2. Einige laufen nur unter JDK 1.2 oder höher, andere unter JDK 1.1 (und nicht höher). Einige erfordern die "com.sun.swing" -Pakete ab 1.0 Tagen vor Swing, andere erfordern die "javax.swing" -Paketnamen.

Schlimmer noch, dieses Problem tritt sogar innerhalb des Unternehmens auf, da Systeme, die vor nur sechs Monaten mit Java entwickelt wurden, aufgrund der Installation einer Java-Erweiterung, die für eine neue (scheinbar nicht verwandte) Anwendungsversion erforderlich ist, plötzlich "nicht mehr funktionieren". Dies kann die Bereitstellung von Java-Anwendungen im gesamten Unternehmen erschweren und Kunden dazu veranlassen, sich genau zu fragen, warum wir fünf Jahre nach dem Beginn der berüchtigten Probleme mit der Installation dieser App, die mein System kaputt macht, mit den DLL-Schemata von Microsoft immer noch Probleme haben Ich bin nicht viel weiter gekommen. (Tatsächlich versucht die neue .NET-Initiative, das soeben beschriebene berüchtigte "DLL-Hell" -Problem zu lösen.)

In diesem Dokument wird beschrieben, wie Sie eine Java-Installation so konfigurieren, dass eine bestimmte Anwendung eine eigene, private JRE erhält, sodass mehrere Java-Umgebungen nebeneinander existieren können, ohne dass Kunden (oder Systemadministratoren) verrückt werden ...

Drikus
quelle
8
Ich denke, der Link in der obigen Antwort existiert nicht mehr. Ich habe den gleichen Artikel hier gefunden docplayer.net/…
Alok Mishra
3

Mit SDKMan können mehrere Versionen von Java Development Kits auf demselben Computer installiert werden.

Einige Punkte zu SDKMan lauten wie folgt:

  1. SDKMan ist kostenlos und wird von der Open Source Community entwickelt.
  2. SDKMan wird schriftlich bash und es erfordert nur curl und zip / unzip Programme auf Ihrem System vorhanden sein.
  3. SDKMan kann rund 29 Software Development Kits für die JVM wie Java, Groovy, Scala, Kotlin und Ceylon installieren. Ameise, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x.
  4. Wir müssen uns nicht um das Festlegen der Variablen _HOMEund der PATHUmgebungsvariablen kümmern , da SDKMan diese automatisch verarbeitet.

SDKMan kann auf allen UNIX-basierten Plattformen wie Mac OSX, Linux, Cygwin, Solaris und FreeBSD ausgeführt und mit den folgenden Befehlen installiert werden:

$ curl -s "https://get.sdkman.io" | bash  
$ source "$HOME/.sdkman/bin/sdkman-init.sh" 

Weil SDKMan in Bash geschrieben ist und nur Curl und Zip / Unzip benötigt , um auf Ihrem System vorhanden zu sein. Sie können SDKMan auch unter Windows installieren, indem Sie zuerst Cygwin oder Git Bash für Windows installieren und dann die obigen Befehle ausführen.

Der Befehl sdk list javagibt uns eine Liste der Java-Versionen, die wir mit SDKMan installieren können.

Java 8 installieren

$ sdk install java 8.0.201-oracle

Java 9 installieren

$ sdk install java 9.0.4-open 

Java 11 installieren

$ sdk install java 11.0.2-open

Java-Version deinstallieren

Wenn Sie eine JDK-Version deinstallieren möchten, z. B. 11.0.2-open, können Sie dies wie folgt tun:

$ sdk uninstall java 11.0.2-open

Aktuelle Java-Version wechseln

Wenn Sie eine Version von JDK für alle Terminals und Anwendungen aktivieren möchten, können Sie den Befehl verwenden

sdk default java <your-java_version>

Die obigen Befehle aktualisieren auch die Variablen PATH und JAVA_HOME automatisch. Weitere Informationen finden Sie in meinem Artikel So installieren Sie mehrere Java-Versionen auf demselben Computer .

Naresh Joshi
quelle
2

Es sollte möglich sein, die Einstellung der Umgebungsvariablen JAVA_HOME für bestimmte Anwendungen unterschiedlich zu ändern.

Wenn Sie von der Befehlszeile oder von einem Batch-Skript aus set JAVA_HOME=C:\...\j2dskXXXstarten, können Sie die JAVA_HOME-Umgebung ändern.

Möglicherweise müssen Sie auch die PATHUmgebungsvariable ändern , um die richtige Java-Binärdatei zu verwenden. Dazu können Sie verwenden set PATH=%JAVA_HOME%\bin;%PATH%.

Ruben
quelle
2

Das Aufrufen von Java mit "java -version: 1.5" usw. sollte mit der richtigen Java-Version ausgeführt werden. (Ersetzen Sie 1.5 natürlich durch die gewünschte Version.)

Wenn Java unter Windows ordnungsgemäß installiert ist, gibt es für jede in der Registrierung gespeicherte Version Pfade zur VM, sodass Sie nicht mit Umgebungsversionen unter Windows herumspielen müssen.

jcoder
quelle
Ich glaube, das funktioniert nur mit "öffentlichen" JREs. Hervorragend auf Client-Computern, ein bisschen schmerzhaft für Entwickler, die die öffentliche JRE nicht installieren. Viel besser als eine Batch-Datei.
James Schek
2

Oder verwenden Sie Links. Während es ziemlich unangenehm ist, den PATH in einer laufenden Umgebung zu aktualisieren, ist es einfach, einen Link zu einer neuen Version von JRE / JDK wiederherzustellen. So:

  • Installieren Sie verschiedene Versionen von JDK, die Sie verwenden möchten
  • Erstellen Sie einen Link zu diesem Ordner entweder über die Junction oder über den integrierten Befehl mklink
  • Setzen Sie den Pfad auf den Link
  • Wenn eine andere Version von Java verwendet werden soll, löschen Sie den Link, erstellen Sie einen neuen. PATH / JAVA_HOME / hardcoded-Skripte bleiben unberührt
jan.supol
quelle
1

Wenn Sie Java Web Start verwenden (Sie können Anwendungen über eine beliebige URL starten, auch über das lokale Dateisystem), wird darauf geachtet, die richtige Version für Ihre Anwendung zu finden.

Peter Lawrey
quelle
0

Mit Java Web Start können Sie mehrere JRE installieren und dann aufrufen, was Sie benötigen. Bei Gewinn können Sie eine .bat-Datei erstellen:

1- Online-Version: < your_JRE_version \ bin \ javaws.exe> ​​-localfile -J-Djnlp.application.href = < die URL der .jnlp-Datei .jnlp> -localfile -J "< path_temp_jnlp_file_ .jnlp>"

2- Starten Sie aus dem Cache: < your_JRE_version \ bin \ javaws.exe> ​​-localfile -J "< path_of_your_local_jnlp_file .jnlp>"

eliana_zulato
quelle