Почему не делает JAVA_HOME набора установщика SDK Java?

Позвольте мне просто повторить проблему, описанную @Steg

. У меня была аналогичная проблема с вашей. Я выполняю запрос ajax, который имеет 2 возможных ответа: один, который перенаправляет браузер на новую страницу и заменяет существующую HTML-форму на текущей странице новым.

ИМХО это является реальной проблемой и должен быть официально распространен на существующие HTTP-стандарты.

Я считаю, что новым стандартом Http будет использоваться новый код состояния. значение: в настоящее время 301/302 сообщает браузеру перейти и получить содержимое этого запроса к новому location.

В расширенном стандарте он скажет, что если ответ status: 308 (просто пример), браузер должен перенаправить главную страницу на предоставленную location.

Это сказано; Я склонен уже имитировать это поведение future , и поэтому, когда необходим document.redirect, я отвечаю на сервер как:

status: 204 No Content
x-status: 308 Document Redirect
x-location: /login.html

Когда JS получает " status: 204 ", он проверяет существование заголовка x-status: 308 и делает document.redirect на странице, представленной в заголовке location.

Это имеет для вас какое-то значение?

32
задан unwind 18 February 2009 в 12:18
поделиться

5 ответов

Можно установить столько версий Java, сколько Вам нравится.

Это было бы опасно, чтобы установка изменила локальный переменная среды такой как JAVA_HOME, так как это могло бы сослаться на существующую установку Java.

Это не имеет никакого отношения к предполагаемой "зависимой проблеме платформы". ;)

, Так как сценарии могли бы зависеть от JAVA_HOME для запуска себя, снова, это будет иметь катастрофические последствия для новой установки Java для изменения JAVA_HOME: все те сценарии должны были бы внезапно быть запущены с новой потенциально несовместимой JVM.

Плюс, установкой $JAVA_HOME/bin или %JAVA_HOME%/bin в Вашем пути, можно динамично измениться JAVA_HOME на любую версию Java, который Вы хотите использовать, не имея необходимость для очень с Вашей переменной ПУТИ.

<час>

Michael Borgwardt сделал в комментариях вопрос интересного продолжения

однако, это не объясняет, почему установщик не устанавливает JAVA_HOME, когда он ранее не установлен вообще.

ответ прост:

установка не может знать, зависит ли сценарий уже от JAVA_HOME или не .

Значение: некоторые сценарии могли протестировать на JAVA_HOME значение, и если не набор, обратитесь к другой JVM, установленной в другом месте (и не забывайте, что "установкой", можно только обратиться к "скопированному": JDK/JRE не всегда устанавливается установкой)

, Если Вы устанавливаете JAVA_HOME, который может разрушить поведение по умолчанию некоторых Ваших сценариев.

Не желание нарушить гипотетические сценарии, которые зависят от огибающего var, не устанавливаемого звук, бессмысленно параноидальный мне - Если сценарий делает это, то это ясно ХОЧЕТ использовать другую JVM, когда каждый установлен - никакая причина избежать этого.

Mmm... Сладкий. Для контакта с крупным развертывание проблемы ежедневно (для внутреннего приложения в моем магазине), я могу уверить Вас: это - очень нормальная "параноидальная" обработка иметь.
, Когда Вы развертываетесь к (очень) большой группе пользователей, Вы не хотите делать любое предположение об их платформе и конфигурациях. "ясно ХОЧЕТ", предположение, которое я не смел бы делать (или я перенаправляю свой телефон к Вашему ;) и Вы обрабатываете сердитые вызовы).

, Например, у нас есть много сценариев, который запускается с 1.4.2 JVM от солнца (JAVA_HOME не набор на платформе разработки, набор пути по умолчанию непосредственно в сценарии), или с 1.4.2 от JRockit (JAVA_HOME набор, поскольку это - намеченная цель на интеграции, подготовке производства и производственных платформах).

, Но мы регулярно устанавливаем новый JDK1.6.x, так как мы используем его для запуска затмения.

Предполагают, что те сценарии хотят их JAVA_HOME набор..., и ничто больше не работает.

... К которому Robert Grant делает этого критика на месте:

Вы описываете сценарии, которые требуют одной определенной версии, но все еще смотрят на глобальный JAVA_HOME. Это только что плохо продумало сценарии.

, В то время как это может или не может быть верно, который также иллюстрирует точно мой тезис:
"Вы не хотите делать любое предположение": никакое предположение на их платформе/настройках и никакое предположение на их "лучших практиках".
Первый может звучать параноидальным, последний является простым здравым смыслом: думание, что Ваш продукт (здесь установка JDK) ничего не повредит на среде пользователя, потому что пользователь "правильно" продумал свои сценарии..., было бы безумно.

<час>

GvS предлагает:

Или это могло просто иметь опцию сделать это, отключенный значением по умолчанию

, Который будет означать другую опцию включать в экраны установки, опция, которая должна быть тщательно рассмотрена пользователем, и которая может иметь непреднамеренные последствия, даже когда пользователь выбирает его, думая, что он знает то, что он делает...

Это просто не стоит того.

35
ответ дан 27 November 2019 в 20:57
поделиться

Я не думаю, что JAVA_HOME является конвенцией, изобретенной или поддерживаемой Sun.

Они, вероятно, помнят фиаско, которое было переменной среды ПУТИ К КЛАССУ ** слишком хорошо, и предпочтите оставаться ад далеко от переменных среды.

** Это было поощрено как основной способ установить путь к классу JVM в более раннем Java SDKs и литература, и привело к пользователю и различному питанию приложений с переменной среды, перезаписав изменения друг друга и в зависимости от взаимно противоречивого содержания.

10
ответ дан 27 November 2019 в 20:57
поделиться

vcvarsall.bat механизм является удобным способом для Visual C++ для предоставления консоли корректные переменные, не смешивая с переменными среды пользователя/системы. Однако это предполагает, что Installshield является единственным способом получить код на систему. JDK должен терпеть быть cut'n'pasted от одного местоположения до другого.

, Если Вы ищете java.exe , установщик Installshield должен поместить его в %windir %\system32 , таким образом, это доступно на ПУТИ.

можно получить некоторые подсказки о местоположении установленных приложений путем запросов реестра:

C:>REG QUERY "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.6" /v JavaHome

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.6
    JavaHome    REG_SZ  C:\dev\Java\jdk1.6.0_05

Однако Вы не можете полагаться на это абсолютно, потому что это делает некоторые предположения о поставщике, версии и механизме установки.

3
ответ дан 27 November 2019 в 20:57
поделиться

Я не уверен, почему это, потому что установщики ясно решают подчиненные проблемы платформы (который является, конечно, смыслом JVM). Вы уверены, что не смешиваете JRE с JSDK?

, Возможно, существует путь к Вашей программе для поиска, где Java установлен (который был бы сценарием, который я предполагаю), и затем установите JAVA_HOME и возможно добавьте его к пути.

IBM, кажется уже, делает этот прием: http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg21199220

Другое интересное сообщение, намекающее на различие между JRE и установками JSDK: http://confluence.atlassian.com/display/CONF26/Set+JAVA_HOME+variable+in+Windows

Hope это помогает.

0
ответ дан 27 November 2019 в 20:57
поделиться

Я предполагаю, что Java не хочет делать что-либо, что зависимо от платформы. В Windows пути к классам установлены по-другому по сравнению с LINUX/UNIX.

-1
ответ дан 27 November 2019 в 20:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: