Почему BlueJ не может учитывать мой Java-дом, тогда как Eclipse может
Я хочу установить BlueJ вручную по причине переносимости. Я установил Java_Home и добавил каталог Java bin в переменную среды path. Я использую симлинк на c:java что указывает на d:java на SD карту.
Почему BlueJ не учитывает их, все еще делая вид, что он не может обнаружить jdk.
Update: Eclipse в порядке, так что есть что-то конкретное с BlueJ и Jdk 1.8 ?
1 ответов
я только что сделал чистую установку BlueJ и JDK 1.8 на отдельных дисках для репликации вашей проблемы. Я сделал символическую ссылку на JDK и поместил это в JAVA_HOME
и PATH
(из-за использования C:\
синтаксис, я догадался, что вы были на Windows, поэтому я тестировал на Windows 8.1).
я тоже обнаружил, что Настройка переменных среды была проигнорирована BlueJ при выборе JDK для использования при его запуске. Я мог бы изменить JDK, используя сопутствующую программу выберите BlueJ VM, но не удалось ввести там символическую ссылку (я считаю, что в более ранних версиях изменение VM было настройкой в меню "Пуск", а не отдельной программой).
в итоге:
- это не проблема с совместимостью BlueJ и Java 8
- это не проблема с символической ссылкой
- для Windows, по крайней мере, это связано с тем, как BlueJ определяет и сохраняет, какой JDK он использует (оба действия через реестр).
- вы можете вручную изменить ключ реестра для вашей ссылки, если вы хотите (см. ниже), но это дополнительные установки.
подробно
я обнаружил, что BlueJ хранит этот путь к JDK, который он использует в следующем разделе реестра
HKEY_CURRENT_USER\Software\BlueJ\BlueJ.1.5\CurrentVM
Примечание корень может быть HKEY_USERS
или HKEY_LOCAL_MACHINE
в зависимости от того, установили ли вы для одного пользователя или всех пользователей компьютера.
проблема в том, что этот ключ устанавливается автоматически, если ваша система имеет только одна виртуальная машина доступна во время выполнения или при первом запуске BlueJ или выберите BlueJ VM программа в любое время позже. Параметры, предлагаемые вам, - это JDK, которые пусковая установка может обнаружить (через реестр) в вашей системе в этот момент. Как только это значение установлено, оно не изменяется динамически во время выполнения для отражения JAVA_HOME
. Даже используя опцию "обзор" из опций, я не мог установить символическую ссылку как местоположение JDK через GUI.
вы можете, однако, вручную измените значение этого раздела реестра (например, через regedit
) к вашему значению символической ссылки (проверено и проверено OK-может потребоваться разрешение администратора).
я посмотрел на исходный код определить как CurrentVM
установлен.
после довольно короткого трала (слава разработчикам BlueJ для хорошего именования), я в конце концов понял, что фактический код, используемый для запуска BlueJ, - это C++ файл в \package\winlaunch\bjlaunch.cc
(исходный файл mercurial ссылка здесь).
это просто проверяет значение раздела реестра и, если он не существует, если вызывает findRegistryVMs()
, который проверяет реестр (не переменные среды) для существующих виртуальных машин и предлагает их пользователю. Таким образом, не существует способа заставить BlueJ использовать значение из JAVA_HOME
без ручного редактирования реестра.
Б. Н. если вы вручную измените это значение ключа на символическую ссылку, вы можете изменить, где символическая ссылка ссылается на и (с перезагрузкой) BlueJ будет использовать тот JDK, с которым связана символическая ссылка. Опять же, испытано и проверено на Windows 8.1
Б. Н. 2 сначала все выглядело оптимистично: в Installer.java
существует метод под названием findJavaPath()
это первая проверка
String javaHome = System.getProperty("java.home");
прежде, чем иметь несколько догадок, если это не сработает. Таким образом, похоже, что он должен уважать значение JAVA_HOME
во время установки. , похоже, это используется только для проверки наличия совместимой (1.6+) версии Java.