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.
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%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)
abrufenGrundsä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:
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.
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 ...
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% 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.
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:
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.
.. 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.
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.