#java #java-8 #windows-10
#java #java-8 #windows-10
Вопрос:
Я должен переключаться между Java 7 и Java 8 в Windows 10.
У меня оба установлены:
C:Program FilesJavajre1.8.0_91
C:Program FilesJavajre7
На моем ПУТИ есть общий путь (который содержит ссылки на исполняемые файлы Java). Это единственное значение Java во всех переменных eviroment:
Path=C:ProgramDataOracleJavajavapath;..
Когда я хочу запустить Java 8, я создаю 3 реальные ссылки на C:Program FilesJavajre1.8.0_91
(с помощью команды mklink /H [link] [origin]
):
C:ProgramDataOracleJavajavapathjava.exe >> C:Program FilesJavajre1.8.0_91binjavapathjava.exe
C:ProgramDataOracleJavajavapathjavaw.exe >> C:Program FilesJavajre1.8.0_91binjavapathjavaw.exe
C:ProgramDataOracleJavajavapathjavaws.exe >> C:Program FilesJavajre1.8.0_91binjavapathjavaws.exe
С этой конфигурацией это работает.
Но, когда я хочу запустить Java 7, я создаю 3 реальные ссылки на C:Program FilesJavajre7
:
C:ProgramDataOracleJavajavapathjava.exe >> C:Program FilesJavajre7binjavapathjava.exe
C:ProgramDataOracleJavajavapathjavaw.exe >> C:Program FilesJavajre7binjavapathjavaw.exe
C:ProgramDataOracleJavajavapathjavaws.exe >> C:Program FilesJavajre7binjavapathjavaws.exe
Когда я пытаюсь запустить java, это не работает!Я получаю следующую ошибку:
Error: Registry key 'SoftwareJavaSoftJava Runtime Environment'CurrentVersion'
has value '1.8', but '1.7' is required.
Error: could not find java.dll Error: Could not find Java SE Runtime Environment.
Есть обходной путь, но он мне не очень нравится. Я могу работать с Java 7 только таким образом:
- Удалить
C:ProgramDataOracleJavajavapath;
из%PATH% - Добавить
C:Program FilesJavajre7bin;
в%PATH%
Мне не нравится это решение, потому что оно отличается от предыдущей конфигурации, и потому что мне каждый раз приходится вручную удалять значение из PATH.
Комментарии:
1. Это просто проблема с копированием и вставкой или вы действительно ссылаетесь на несуществующий .. jre7 bin javapath java.exe ?
2. Это полная команда, и она работает:
mklink /H C:ProgramDataOracleJavajavapathjava.exe "C:Program FilesJavajre7binjava.exe"
3. Проблема в том, что java.exe пытается сначала найти свой каталог JRE, проверив, находится ли он там, откуда он был запущен. Поскольку каталог javapath не содержит JRE, он затем ищет его в реестре и находит неправильный. Если вы добавите каталог JRE7 bin в путь, java.exe я найду его. Вам не нужно удалять каталог javapath; просто убедитесь, что jre7bin стоит на первом месте, например
path %programfiles%Javajre7bin;%path%
, будет достаточно.4. хорошо, но таким образом, каждый раз, когда мне нужно переключать версию JAva, мой пакет добавляет другой путь в начале %PATH%; в противном случае я должен вручную изменить его
5. Я знаю, это не идеальное решение — вот почему я не назвал это ответом.
Ответ №1:
Было бы неплохо узнать, какой рекомендуемый способ Oracle, но не смог найти эту информацию. Следующее может быть разумным взломать обходной путь (я использовал аналогичный метод в прошлом).
Создайте соединение (или символическую ссылку):
mklink /j "C:Program FilesJavajre" "C:Program FilesJavajre1.8.0_102"
Затем удалите C:ProgramDataOracleJavajavapath
из вашего PATH
и замените его C:Program FilesJavajrebin
.
Теперь, когда вы хотите переключиться на Java 7, просто сделайте:
rd "C:Program FilesJavajre"
mklink /j "C:Program FilesJavajre" "C:Program FilesJavajre7"
Это работает, потому что, когда вы сейчас введете java
, он найдет его (по ПУТИ) C:Program FilesJavajrebinjava.exe
. Исполняемый файл знает, в каком каталоге он находится, и ищет там другие файлы (jar, DLL и т. Д.). Поскольку jre
теперь это псевдоним для jre7
, он найдет правильные. И поскольку он их находит, он не заглядывает в реестр.
Вы можете, конечно, создать командный файл или ярлык, содержащий команду для переключения между двумя версиями.
Комментарии:
1. Разница между вашей и моей конфигурацией заключается в том, что вы создаете a
mklink /J
для папки, а я создаю amilink /H
для исполняемых файлов. К сожалению, ваше решение имеет ту же ошибку в разделе реестра. То же самое сmklink /H
папкой. Я не знаю почему, но наличие реальной папки в ПУТИ вместо ссылки делает все различия.2. @Radioleao
mklink /h
не работает с папками afaik, вам нужно будет использоватьmklink /d
. Возможно, вы захотите попробовать это.3. Я пробовал 4 конфигурации: жесткая ссылка на файлы — жесткая ссылка на папку — символическая ссылка на файлы — символическая ссылка на папку.
4.Я протестировал это решение с Windows 10 и Java 6, 7 и 8 (JDK), и оно работало без сбоев. Интересно, что лучший вариант был
mklink jdk pathToActualJDK
без использования/D
. Затем сама ссылка обрабатывается как файл, но разрешение путей через нее все еще работает, т. Е. Добавлениеjdkbin
кPATH
разрешению поискаjava.exe
и т. Д. Связанного фактического jdk. Преимущество неиспользования/D
заключается в том, что вы можете простоdel jdk
избавиться от ссылки, неdel
пытаясь удалить рекурсивно, посколькуjdk
она обрабатывается как файл.5. @Radioleao: в нем содержались ссылки на некоторые из моих установок 1.8, но чтобы доказать, что они не имеют значения при связывании папки jdk, я удалил всю
JavaSoft
ветку, и она все еще работает. Ключевым моментом на самом деле является то, что вам нужно связать всю папку jre или jdk, а не исполняемые файлы.
Ответ №2:
Я не уверен на 100%, но я полагаю, что вам, возможно, придется установить для переменной JAVA_HOME ту версию, которую вы также хотите использовать.
Комментарии:
1. До сегодняшнего дня он всегда работал без JAVA_HOME, может быть, это старые вещи? В любом случае я попробовал УСТАНОВИТЬ JAVA_HOME = C:Program FilesJava jre7 и ничего не изменилось.
2. Извините, я должен был присмотреться. JAVA_HOME предназначен для JDK. JRE_HOME применяется к JRE
3. Никаких ошибок. Но при дальнейшей проблеме это сработало, если я изменил значение переменной окружения%PATH%, но это не лучшее решение. Я собираюсь обновить свой запрос.
4. mindprod.com/jgloss/javaexe.html#MULTIPLES может быть, это поможет вам немного больше. Похоже, что в system32 также есть java, поэтому, если она первая на вашем пути, она будет просматривать реестр, чтобы решить, какую версию запускать. Может быть, измените значения вашего пути?
5. Я никогда не устанавливал
JAVA_HOME
norJRE_HOME
за последние двадцать лет использования Java.