Ich möchte BlueJ aus Gründen der Portabilität manuell installieren. Ich habe Java_Home gesetzt und Java bin-Verzeichnis der Pfadumgebungsvariablen hinzugefügt. Ich verwende einen Symlink auf c: \ java, der auf d: \ java auf SD-Karte zeigt.
Warum BlueJ sie nicht berücksichtigt und trotzdem vorgibt, jdk nicht zu erkennen.
Update: Eclipse ist in Ordnung, gibt es also etwas Spezifisches mit BlueJ und Jdk 1.8?
Ich habe gerade eine Neuinstallation von BlueJ und JDK 1.8 auf separaten Laufwerken durchgeführt, um Ihr Problem zu replizieren. Ich habe einen Symlink zum JDK gemacht und habe das in JAVA_HOME
und PATH
(von Ihrer Verwendung von C:\
Syntax, ich vermutete, dass Sie auf Windows waren, also habe ich auf Windows 8.1 getestet).
Ich habe auch festgestellt, dass die Einstellung von Umgebungsvariablen von BlueJ bei der Auswahl eines JDK ignoriert wurde, das verwendet werden soll, wenn es ausgeführt wird. Ich könnte JDK mit dem Companion-Programm Select BlueJ VM ändern, aber dort keinen Symlink eingeben (ich glaube an frühere Versionen, das Ändern der VM war eine Einstellung im Startmenü, kein separates Programm).
Ich habe festgestellt, dass BlueJ diesen Pfad zu dem JDK speichert, das in dem folgenden Registrierungsschlüssel verwendet wird
HKEY_CURRENT_USER\Software\BlueJ\BlueJ.1.5\CurrentVM
Beachten Sie, dass der Stamm HKEY_USERS
oder HKEY_LOCAL_MACHINE
sein kann, je nachdem, ob Sie für einen Benutzer oder für alle Benutzer des Computers installiert haben.
Das Problem besteht darin, dass dieser Schlüssel automatisch festgelegt wird, wenn auf Ihrem System zur Laufzeit oder bei der ersten Ausführung von BlueJ oder der Select BlueJ VM nur eine VM verfügbar ist Programm jederzeit später. Die Optionen, die Ihnen dort angeboten werden, sind die JDKs, die der Launcher in diesem Moment (über die Registrierung) auf Ihrem System erkennen kann. Sobald dieser Wert festgelegt ist, wird er zur Laufzeit nicht dynamisch geändert, um JAVA_HOME
wiederzugeben. Selbst wenn ich die "Browse" -Option von den Optionen verwendete, konnte ich den Symlink nicht als JDK-Ort über die GUI festlegen.
Sie können jedoch den Wert dieses Registrierungsschlüssels (z. B. via regedit
) manuell auf Ihren Symlink-Wert ändern (getestet und verifiziert OK - möglicherweise Administrator) Berechtigungen).
Ich habe mir den Quellcode angesehen, um zu ermitteln, wie CurrentVM
ist einstellen.
Nach einem ziemlich kurzen Trawl (Lob an BlueJ Devs für gute Benennung), habe ich schließlich herausgefunden, dass der eigentliche Code, der zum Starten von BlueJ verwendet wird, die C ++ Datei in \package\winlaunch\bjlaunch.cc
ist ( quelldatei mercurial link hier ).
Das überprüft einfach den Wert des Registrierungsschlüssels und, wenn es nicht existiert, ruft findRegistryVMs()
auf, was die Registrierung überprüft ( NOT Umgebungsvariablen) ) für verfügbare VMs und bietet diese dem Benutzer an. Es scheint also keine Möglichkeit zu geben, BlueJ dazu zu bringen, den Wert von JAVA_HOME
ohne manuelle Bearbeitung der Registry zu verwenden.
N.B. Wenn Sie diesen Schlüsselwert manuell in den Symlink ändern, können Sie ändern, wo der Symlink verlinkt und (bei einem Neustart) BlueJ wird das JDK verwenden, mit dem der Symlink verknüpft ist. Auch hier getestet und verifiziert auf Windows 8.1
NB. 2 Zunächst sahen die Dinge optimistisch aus: In Installer.java
gibt es eine Methode namens findJavaPath()
, die zuerst
vor ein paar Vermutungen, wenn das nicht funktioniert. Es sieht also so aus, als sollte der Wert von JAVA_HOME
zur Installationszeit respektiert werden . Allerdings scheint es nur zu nutzen, um zu überprüfen, ob eine kompatible (1.6+) Version von Java verfügbar ist.