JDK 7 сообщает о себе как JRE (через системное свойство "java.home")

Я только что установил последнюю версию JDK 7 Update 21 и написал следующую однострочную версию (в Windows 7):

public static void main(String[] args) {
    System.out.println("java.home = " + System.getProperty("java.home"));
}

выход (удивительно):

java.home = D:\Java\jdk1.7.0_21\jre

Я считаю, что я исправил все общие причины:

  1. JAVA_HOME имеет значение "D:\Java\jdk1.7.0_21"
  2. Я установил "D:\Java\jdk1.7.0_21\bin" в качестве первого пути в настройках системного PATH.
  3. В Windows\System32 нет файла java.exe
  4. Я использую "свежую" командную строку
  5. Я много раз искал этот и другие сайты
  6. Мой реестр не содержит ключ "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment". Значение "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.7" содержит правильное значение "JavaHome".
  7. Добавление опции -server к вызову java.exe не меняет вывод

Вот еще вывод для вашей информации

D:\Temp>echo %PATH%
d:\Java\jdk1.7.0_21\bin

D:\Temp>echo %JAVA_HOME%
D:\Java\jdk1.7.0_21

D:\Temp>type SystemInfo.java
public class SystemInfo {

        public static void main(String[] args) {
                System.out.println("java.home = " + System.getProperty("java.home"));
        }

}

D:\Temp>java -verbose SystemInfo
[Opened d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
[Loaded java.lang.Object from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
[Loaded java.io.Serializable from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
...
[Loaded java.lang.Void from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
java.home = d:\Java\jdk1.7.0_21\jre
[Loaded java.lang.Shutdown from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]
[Loaded java.lang.Shutdown$Lock from d:\Java\jdk1.7.0_21\jre\lib\rt.jar]

(Обновлено:) В основном мне нужно знать, как запустить мое java-приложение, чтобы оно имело доступ к java-компилятору (находится в JDK tools.jar), не копируя этот JAR-файл в другое место.

Кстати, главная проблема заключается в том, что мой причал не может скомпилировать JSP, так как отсутствует java-компилятор. Я знаю, что могу добавить "tools.jar" в JRE\lib\ext, но это не долгосрочное решение.

2 ответа

Решение

Это по умолчанию - указано в коде C++ интерпретатора Java HotSpot. Кроме того, это то, что Sun изначально хотела, чтобы системное свойство устанавливалось, когда домашняя страница Java среды указывает на JDK.

См. Учебные руководства по Java для TM System, где оно описывает системное свойство java.home как "Каталог установки для среды выполнения Java (JRE)". Кроме того, обратите внимание, что Java 7 Javadoc для Class System от Oracle является НЕПРАВИЛЬНЫМ (в ужасе!), Где он описывает системное свойство java.home как "каталог установки Java".

Ответ лежит в строке 309 фактического кода JVM!

Это прекрасно, что вы видите в качестве вывода - это ваша среда исполнения Java по умолчанию.

Возможно, это поможет вам настроить Jetty для использования JDK.

Другие вопросы по тегам