Wie programmiere ich alle Java JVM (nicht standardmäßig) mit Java?

8

Kann jemand programmatisch alle JVMs installieren (nicht die Standardversion) mit Java ?

Beispielsweise sind 2 JVMs auf dem Computer eines Benutzers installiert:

%Vor%

Ich muss alle installierten Versionen kennen, um die Version zu wechseln, die standardmäßig verwendet wird, und dann javac programmatisch aufzurufen, um Quellcode mit einer bestimmten JDK-Version zu kompilieren.

Ich habe nach Informationen gesucht, die ich im Internet gefunden habe:

Aber ich konnte nicht finden, wonach ich gesucht habe.

    
Florencia 27.06.2011, 13:48
quelle

10 Antworten

11

Ich habe mich kürzlich mit einer sehr ähnlichen Situation befasst. Der folgende Code macht fast genau das, was Sie brauchen. Es sucht nach Java-JREs und -JDKs, nicht nur nach JDKs, sondern sollte ziemlich einfach nach Ihren Bedürfnissen zu bearbeiten sein. Vorsicht: Nur für Windows

%Vor%

Sie benötigen außerdem das aktualisierte WinRegistry.java, um Werte aus den Abschnitten 32-Bit und 64-Bit der Windows-Registrierung zu lesen: Ссылка

Ich bin normalerweise kein Java-Programmierer, also folgt mein Code wahrscheinlich nicht den Java-Konventionen. Sue mich.

Hier ist ein Beispiel von meinem Win 7 64-Bit-Rechner:

%Vor%     
Petrucio 07.08.2012 18:18
quelle
3

Ich habe eine kurze Überprüfung der Windows-Registrierung durchgeführt, und dieser Schlüssel scheint die verschiedenen auf dem System installierten Java-Versionen bereitzustellen.

HKEY_LOCAL_MACHINE \ SOFTWARE \ JavaSoft \ Java Laufzeitumgebung

Bei der weiteren Google-Suche wurde bestätigt, dass dies der richtige Ort ist. Lesen Sie diese Artikel für die Details ...

Schnell verfügbare Java JVM auf einer Arbeitsstation (Windows)

abrufen

Java 2 Laufzeitumgebung für Microsoft Windows

    
vikramsjn 04.11.2011 03:39
quelle
2

Grundsätzlich gibt es keine Möglichkeit, alle JVM auch nicht aus Java-Code aufzulisten. Betrachten Sie verschiedene Plattformen, verschiedene JDK-Anbieter, gebündelte JDK in anderen Produkten von Datenbanken bis Flugsimulator und Video-Rendering-Engine. Die meisten JDKs sind einfache Verbindungen zu anderen, z. v.1.2 wies auf installierte v.6 hin. Das Übliche ist, wie man eine Version bekommt: Java-Version Aber wir haben einige Punkte:

  1. Unter Windows sehen Sie sich die Registry HKEY_LOCAL_MACHINE \ Software \ JavaSoft \ an. Beachten Sie auch den Wow6432Node-Modus für 64-Bit-Betriebssysteme. Überprüfen Sie Produkte von Hauptanbietern, deren Software auf Java erstellt wurde.
  2. Mac OS X /System/Library/Frameworks/JavaVM.framework/Versions + Öffnen Sie JDK
  3. Linux und ein anderes Unix - welches Java, / etc / alternatives / java rpm - qa | grep java usw.
chro 27.06.2011 15:17
quelle
2

Auf Windows-Plattformen können Sie Shell-Abfragen durchführen, ob eine installierte JRE vorhanden ist:

%Vor%

Dieser Befehl wird mit "Java Version" 1.6.0_xx "" zurückkommen, wenn Sie ihn installiert haben. Wenn Sie es nicht installiert haben, heißt es: "Die JRE-Meeting-Spezifikation 1.6 kann nicht gefunden werden"

Dies scheint unter Linux nicht zu funktionieren, wahrscheinlich weil Linux keine Standardmethode zur Installation von Java bietet.

    
Troy 01.08.2012 17:20
quelle
1

installiert ist ziemlich vage - selbst wenn JREs und JDKs mit einem Installer ausgeliefert werden, müssen wir lediglich die Dateien einer JRE oder JDK auf einen Computer kopieren und kann sofort verwenden .

Also müssten Sie im Allgemeinen alle java oder java.exe executables auf Ihrem lokalen Rechner finden und% code_% aufrufen, um 1 zu sehen, wenn dies der Fall ist Die ausführbare Datei java -version / java ist wirklich (Teil von) einer JRE.

Ich habe gerade gesehen, dass Sie nach JVM gefragt haben und den Compiler aufrufen wollen. Wenn Sie JDKs suchen, verwenden Sie die obige Methode, aber finden Sie alle java.exe /%Code%. Sie haben auch eine Option javac .

1 es gibt ein kein Risiko - kein Spaß , das mit dieser Methode kommt - bitte werfen Sie einen Blick auf Seans Kommentar! Wenn Sie die Maschine (oder ihre Benutzer ) nicht vertrauen können, sollten Sie testen, ob die ausführbare Datei ein Skript / Batch oder eine Binärdatei ist - obwohl a binary kann auch Ihre Festplatte löschen, sogar die originale ausführbare Java-Datei kann durch etwas bösartigen Code ersetzt werden ...

    
Andreas_D 27.06.2011 13:55
quelle
1

In der Windows-Eingabeaufforderung können Sie die folgenden zwei Befehle ausführen (oder als Batch-Datei zusammen ausführen). Dies wird in Windows Add / Remove-Programmen (Registrierungseinträge) aussehen und berichten, welche Versionen von JAVA mit Install / Uninstall-Links gefunden werden, zusammen mit dem Ordnerpfad und einigen anderen Dingen.

%Vor%     
Craig 12.02.2013 17:46
quelle
0

Ich bin mir nicht sicher, ob dies Ihre Frage beantwortet, aber Sie können steuern, mit welcher JRE-Hauptversion ein Applet oder eine WebStart-Anwendung bei Verwendung der Familienversionsfunktion ausgeführt wird. Auf diese Weise können Sie die Java-Hauptversion angeben, auf der ein Applet ausgeführt wird. Sie sollten in der Lage sein, den Speicherort von javac von dort abzuleiten.

Ссылка

    
maple_shaft 27.06.2011 13:57
quelle
0

Um die installierten Versionen von Java zu finden, ist es besser, als javac.exe zu suchen, die Registrierung zu überprüfen. Java erstellt einen Registrierungsschlüssel HKEY_LOCAL_MACHINE\Software\JavaSoft\Java Runtime Environment mit einer Zeichenfolge CurrentVersion , die auf die Versionsnummer festgelegt ist, beispielsweise 1.5 oder 1.6.

Sie können diese Information verwenden, um die JVMs zu finden:

  • HKEY_LOCAL_MACHINE \ Software \ JavaSoft \ Java Laufzeitumgebung \ 1.5 \ JavaHome = C: \ Programme \ Java \ j2re1.5
  • HKEY_LOCAL_MACHINE \ Software \ JavaSoft \ Java Laufzeitumgebung \ 1.5 \ RuntimeLib = C: \ Programme \ Java \ j2re1.4.2 \ bin \ client \ jvm.dll

Sie können hier mehr sehen: Ссылка

Ich bin nicht vertraut mit dem Zugriff auf die Registrierung von Java, aber Sie können immer die Befehlszeilenschnittstelle von regedit ausführen und die Ergebnisse analysieren, was ich getan habe.

    
Steven 27.06.2011 14:14
quelle
0
  

.. kompilieren Sie Quellcode mit einer bestimmten JDK-Version.

Verwenden Sie den JavaCompiler (im neuesten JDK kann der Benutzer legen Sie die Hände auf) mit entsprechenden Optionen für -source , -target & amp; -bootclasspath . Die letzten beiden sind Teil der Cross-Compilation-Optionen von javac .

Um das JDK zu finden, geben Sie einen JFileChooser mit dem Pfad der aktuellen JRE als Standardverzeichnis ein. Wenn der Benutzer nicht von dort zu einem JDK navigieren kann, ist es zweifelhaft, ob er Code schreiben sollte.

    
Andrew Thompson 27.06.2011 14:14
quelle
0

Wie bereits erwähnt, sollte HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment verfügbare JVMs auflisten, ABER ich habe gerade herausgefunden, dass, während diese Registrierung derzeit nur eine 64-Bit 1.6.0_31 JVM auf meinem Rechner auflistet, ich auch ein 32-Bit-Java installiert habe C:\Windows\SysWOW64 .

Die in der Registrierung aufgelisteten Informationen zeigen also nicht das vollständige Bild. Wenn Sie eine 32-Bit-JVM in einem 64-Bit-Windows ausführen möchten, sollten Sie auch C:\Windows\SysWOW64 ausprobieren.

    
Petrucio 06.08.2012 18:10
quelle

Tags und Links