Warum kann BlueJ mein Java Home nicht berücksichtigen, während Eclipse das kann?

8

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?

    
user310291 29.08.2015, 21:15
quelle

1 Antwort

15

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).

Zusammenfassend:

  • Es ist kein Problem mit BlueJ und Java 8 Kompatibilität
  • Es ist kein Problem mit dem Symlink
  • Für Windows zumindest, liegt es an der Art, wie BlueJ bestimmt und speichert, welches JDK es verwendet (beide Aktionen über die Registrierung).
  • Sie können den Registrierungsschlüssel manuell auf Ihren Symlink ändern, wenn Sie möchten (siehe Details unten), aber das ist ein zusätzlicher Installationsschritt.

Im Detail

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

überprüft %Vor%

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.

    
J Richard Snape 07.09.2015, 10:30
quelle

Tags und Links