Как тихо установить Java JDK в определенный каталог в Windows

На моем компьютере для разработки мне всегда приходится устанавливать Java 6 и Java 7, и я должен устанавливать каждый JDK как в 32-битной, так и в 64-битной версии для целей тестирования. Поскольку частота обновлений Java становится все более и более смешной (уже два раза в неделю?), каждое обновление требует, чтобы я удалял, а затем переустанавливал 4 JDK. Так что это становится очень раздражающим, и поэтому я хотел бы написать сценарий всего этого процесса.

Моя проблема в том, что по умолчанию каждая версия JDK устанавливается в путь к каталогу, который содержит номер обновления (по умолчанию: «C:\Program Files\Java\jdk1.6.0_‹update-nr›\»). Чтобы избавить меня от необходимости адаптировать множество скриптов сборки, я всегда вручную удаляю конечный «_‹update-nr›» из пути установки и всегда устанавливаю в тот же «C:\Program Files\Java\jdk1.6.0» или "C:\Program Files\Java\jdk1.7.0", соответственно, для 64-битных версий и в C:\Program Files (x86)\Java\jdk1.6.0" или "C:\Program Files (x86)" \Java\jdk1.7.0", соответственно, для 32-битных версий.

Пока я узнал, как указать каталог установки для установщика JRE (т.е. среды выполнения Java):

<jre-installfile>.exe [/s] [INSTALLDIR=<drive>:\<JRE_install_path>] 
    [STATIC=1] [WEB_JAVA=0/1] [WEB_JAVA_SECURITY_LEVEL=VH/H/M/L]

Я пока не нашел похожего описания, как указать каталог установки для установщика JDK.

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


person mmo    schedule 08.03.2013    source источник
comment
На моем компьютере для разработки мне всегда приходится устанавливать Java 6 и Java 7, и я должен устанавливать каждый JDK Я бы сказал, что вы ошибаетесь. Как вы думаете, вам нужно установить две версии SDK? Какие преимущества или возможности он дает? Кстати - оставляйте знаки. вне вопросов - они шум.   -  person Andrew Thompson    schedule 08.03.2013
comment
@AndrewThompson Мне нужно установить каждый JDK как в 32-, так и в 64-разрядной версии, в целях тестирования   -  person assylias    schedule 08.03.2013
comment
@assylias Плохо. -- ХОРОШО. Вам нужны не два JDK, а один JDK (для компиляции) и два JRE (для тестирования).   -  person Andrew Thompson    schedule 08.03.2013
comment
Я думаю, это отдельная дискуссия. Я также использую разное. инструменты, требующие установки JDK. Некоторые из них 32-битные, некоторые 64-битные. Может быть, мне нужны не ВСЕ, а хотя бы 2 или 3 разных, поэтому я просто устанавливаю ВСЕ варианты, когда есть обновление. Но, пожалуйста, меня действительно больше интересует ответ на мой первоначальный вопрос.   -  person mmo    schedule 08.03.2013
comment
выглядит как элемент для парада ошибок оракула, который будет добавлен в качестве будущей функции. может быть, вы можете попробовать opensdk?   -  person tgkprog    schedule 12.03.2013


Ответы (8)


Я смог успешно установить версию JDK 8 update 60 для x64 и x86, включая общедоступную JRE, с помощью следующих команд:

Здесь JDK 1.8.60 (x86) с исходным кодом переходит в C:\Java\x86\jdk1.8.0_60, а JRE — в C:\Java\x86\jre1.8.0_60:

jdk-8u60-windows-i586.exe /s ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR=C:\Java\x86\jdk1.8.0_60 /INSTALLDIRPUBJRE=C:\Java\x86\jre1.8.0_60

Аналогичным образом JDK 1.8.60 (x64) с исходным кодом переходит в C:\Java\x64\jdk1.8.0_60, а JRE — в C:\Java\x64\jre1.8.0_60:

jdk-8u60-windows-x64.exe /s ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR=C:\Java\x64\jdk1.8.0_60 /INSTALLDIRPUBJRE=C:\Java\x64\jre1.8.0_60

См. параметры установки JRE.

person Vivit    schedule 26.08.2015
comment
Автоматическая установка JDK 8 docs.oracle.com/ javase/8/docs/technotes/guides/install/ - person SimplyInk; 21.03.2017

Я только что нашел эту статью во время поиска... в ней указан параметр для INSTALLDIR.

http://makeitfaster.wordpress.com/2011/03/25/java-jdk-silent-install-on-windows/

jdk-7u2-windows-i586.exe /s ADDLOCAL="ToolsFeature,SourceFeature" INSTALLDIR="%CD%\jdk7u2"

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

person Matt    schedule 26.04.2013
comment
Увы, похоже, это не работает. При вызове командной строки, как показано в упомянутой статье, я всегда получаю всплывающее окно с установщиком Windows, который, по-видимому, пытается научить меня тому, что я неправильно указал некоторые параметры. Но перечисленные параметры относятся к файлу .msi (который предположительно содержится в файле jdk.exe, но недоступен напрямую при выполнении команды...). - person mmo; 28.04.2013

Попробуйте: jdk-7u2-windows-i586.exe /s INSTALLDIR=\"C:\Program Files\JAVA\JDK\"

person user2503019    schedule 19.06.2013
comment
Это то же предложение, что и выше, и, как я уже писал в комментарии к нему, оно не работает, но вызывает диалоговое окно с ошибкой установщика MSI... - person mmo; 24.06.2013

Одним из способов избежать перезаписи каталогов в сценариях является использование символических ссылок (переходов в NTFS). Сначала загрузите утилиту соединения с сайта SysInternals здесь: http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx затем разархивируйте, скопируйте в какой-либо каталог в PATH и запустите один раз, чтобы принять лицензию.

Тогда вы сможете легко создавать символические ссылки: junction "C:\Program Files\Java\jdk1.6.0" "C:\Program Files\Java\jdk1.6.0_37" junction "C:\Program Files (x86)\Java\jdk1.6.0" "C:\Program Files (x86)\Java\jdk1.6.0_37"

Чтобы удалить символическую ссылку: junction -d "C:\Program Files\Java\jdk1.6.0"

Вы также можете использовать mklink ( http://technet.microsoft.com/en-us/library/cc753194.aspx ) (и del для удаления), но я предпочитаю простоту и ясность соединения.

person uk4sx    schedule 17.07.2014
comment
+1 за использование узлов (точек повторной обработки) в Windows. Я делаю это со своими версиями Ruby и Python и простыми пакетными файлами для управления версиями. Немногие люди знают, что они существуют в Windows. - person kodybrown; 25.04.2015

Я только что обнаружил регрессию в установщике JDK7, из-за которой он игнорирует INSTALLDIR. Последняя правильная версия - обновление 21.

Я подал отчет об ошибке и сообщу вам, как только Oracle ответит.

ОБНОВЛЕНИЕ: оказалось, что это было вызвано поврежденной (неполной) установкой JDK. Как только я удалил эту версию (Установка и удаление программ), новая установка прошла нормально.

person Gili    schedule 16.09.2013
comment
С обновлением 7u51 он больше не работает с установщиком JRE. Как установщик JRE, так и установщик JDK при запуске из командной строки с использованием ‹installer›.exe /s INSTALLDIR=‹dir› выводят только диалоговое окно с ошибкой msi-installer... :-( - person mmo; 22.01.2014
comment
<installer>.exe /passive INSTALLDIR="<dir>" у меня работает с 7u79. - person Knyri; 08.07.2015

Это способ, который работает для меня для JDK_7u55. Я также решил установить JRE:

Команды PowerShell

$strJavaInstallExe=<Your JDK executable>
$strJavaInstallDir=<The directory you want the JDK and JRE to install to>

$cmdInstallJava=$strJavaInstallExe+' /passive /log "'+$strJavaInstallDir+'\install.log" ADDLOCAL="ToolsFeature,SourceFeature,PublicjreFeature" INSTALLDIR="'+$strJavaInstallDir+'" INSTALLDIRPUBJRE="'+$strJavaInstallDir+'"'

Invoke-Expression $cmdInstallJava

Надеюсь это поможет!

person Rodney Spencer    schedule 25.02.2015

ИЗМЕНИТЬ – проще

Выполнить jdk-7u60-windows-x64.exe /passive /log install.log INSTALLDIR:c:\pippo

Работает с 7u45 и 7u60

СТАРЫЙ ответ

exe содержит установщик msi. Извлекать есть (наверняка есть более изящные способы, но я знаю только этот)

  1. Запустите exe вручную - это нужно сделать только в первый раз, чтобы преобразовать его в msi
  2. Возьмите msi (и все другие файлы .cab) из C:\Users\AppData\LocalLow\Sun\Java\jdx.x.y\jdk.x.y.z.msi
  3. беги msiexec /i jdkx.y.z.msi /passive INSTALLDIR:c:\pippo
person Tommaso    schedule 02.07.2014

файл jreinstall.bat (пример: хранилище на рабочем столе) (замените jre на jdk)

@echo off
start /w %UserProfile%\Desktop\jre-8u65-windows-x64.exe /s
setx JAVA_HOME "C:\Program Files\Java\jre1.8.0_65"
exit
person ajcg    schedule 16.01.2019