После перехода на Java8, javac по-прежнему показывает 1.7
У меня проблемы с обновлением JDK 1.7 → 1.8 на OSX. Обновление завершено, но javac по-прежнему возвращает 1.7 в качестве версии.
Я загрузил JDK 8_u5 с домашней страницы Oracle и запустил установщик.
Я также выполнил следующие шаги, после установки:
> export JAVA_HOME=`/usr/libexec/java_home -v 1.8` (Executed in my .bashrc file)
> echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
> javac -version
javac 1.7.0_21
> $JAVA_HOME/bin/javac -version
javac 1.7.0_21
> $JAVA_HOME/bin/java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
Я прошел и удалил Java 1.7 (и все другие версии JDK), а затем снова запустил установщик:
> ls /Library/Java/JavaVirtualMachines
jdk1.8.0_05.jdk
По-прежнему бесполезно, javac сообщает о версии как 1.7.0_21
> which javac
/usr/bin/javac
> ls -ltra /usr/bin/javac
[snipped] /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac
В этом пути Current
является символической ссылкой на A
. Содержимое A/Commands
представляет собой серию файлов (а не символических ссылок).
> cd A/Commands
> ./javac -version
javac 1.7.0_21
> ./java -version
java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
Изменить
В дополнение к исходному сообщению, я сделал несколько операций с jenv, как это было предложено на этот ответ.
> jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
> jenv global oracle64-1.8.0.05
> jenv version
oracle64-1.8.0.05 (set by /Users/martypitt/.jenv/version)
> jenv info java
Jenv will exec : /Users/martypitt/.jenv/versions/oracle64-1.8.0.05/bin/java
> jenv info javac
Jenv will exec : /Users/martypitt/.jenv/versions/oracle64-1.8.0.05/bin/javac
> javac -version
javac 1.7.0_21
Это отличает мои мысли о том, что это был случайный javac, скрывающийся на моем пути, который каким-то образом вызывался.
Конечно, я полностью отключил Java и снова попытался:
> cd /Library/Java/JavaVirtualMachines
> ls
jdk1.7.0_55.jdk
jdk1.8.0_05.jdk
> sudo rm -rf *
> ls
<<empty>>
> java -version
java version "1.6.0_65"
> javac -version
javac 1.6.0_65
> which javac
/usr/bin/javac
Затем я повторно загрузил новую копию установщика и запустил его.
> java -version
java version "1.8.0_05"
> javac -version
javac 1.7.0_21
Update
Я попытался удалить все JDK, XCode и все инструменты для разработчиков и снова установить свежие.
Те же результаты.
Тем не менее, я все еще в растерянности - куда мне идти? Как получить javac 1.8 для установки?
Ответы
Ответ 1
Если /usr/libexec/java_home -v 1.8.0_05 --exec javac -version
возвращает правильную версию, ваша проблема связана с:
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
С привилегированным пользователем выполните:
cd /System/Library/Frameworks/JavaVM.framework/Versions/
rm CurrentJDK
ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/ CurrentJDK
Решение найдено в Блог Mankeh
Также проверьте этот ответ на Super User для динамического переключения версий JDK.
Обновление: Я предполагаю, что нашел виновника!
Попробуйте следующее:
rm -rf ~/Library/Java/Extensions
sudo rm -rf /Library/Java/Extensions
Решение найдено в: Java 1.7 на OSX 10.9.2 работает как 1.5?
Ответ 2
Для пользователей Windows:
Возможно, вам нужно изменить свою переменную PATH.
Попробуйте установить "% JAVA_HOME%/bin" в качестве записи first в PATH.
Итак, теперь это выглядит так:
PATH C:\Program Files\anyprogram;C:\Program Files\...;%JAVA_HOME%\bin
И вы меняете его так:
PATH %JAVA_HOME%\bin;C:\Program Files\anyprogram;C:\Program Files\...
Причина: любая другая программа сначала инициирует другую версию Java.
Ответ 3
Это (скорее всего) ошибка в процессе установки jre8.
Я получаю то же самое поведение при навигации по моей папке jre8, которая по умолчанию отображается в Windows (в моем случае):
- версия java: 1.8.0, среда выполнения 1.8.0-b132, горячая точка 64-разрядная JVM 25.0-b70
- версия javac: 1.7.0_25
При переходе в каталог jdk8 он отображает следующее:
- версия java: 1.8.0, среда выполнения 1.8.0-b132, горячая точка 64-разрядная JVM 25.0-b70
- версия javac: 1.8.0
Я только сейчас заметил, что jre никогда не отправляет javac, так что это проблема в настройках ссылок в операционной системе, тогда я думаю.
Чтобы исправить это, вам нужно вручную исправить ссылку javac в вашей ОС.
Ответ 4
Может быть, вы можете удалить стандартный .jar файл, который в вашем пути к классам. Когда я удалю банку в /Library/Java/Extensions
, проблема будет решена.
Больше информации:
Ошибка компиляции Java: Mac
Ответ 5
Просто добавив свой собственный опыт здесь, я установил jdk-8u131-macosx-x64 из Oracle. Все отлично работало. Никаких переменных окружения JAVA_HOME не было.
mehboob$ javac -version
javac 1.8.0_131
mehboob$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
The/System/Library показала это:
mehboob$ ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.4 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.4.2 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.5 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.5.0 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.6 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.6.0 -> CurrentJDK
drwxr-xr-x 8 root wheel 272 Sep 9 2014 A
lrwxr-xr-x 1 root wheel 1 Oct 17 2013 Current -> A
lrwxr-xr-x 1 root wheel 59 Oct 17 2013 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
В то время как в /Library/Java было следующее:
mehboob$ ls -l /Library/Java/
total 8
drwxrwxr-x 2 root admin 68 Oct 17 2013 Extensions
lrwxr-xr-x 1 root wheel 48 Oct 17 2013 Home -> /System/Library/Frameworks/JavaVM.framework/Home
drwxr-xr-x 3 root wheel 102 Jun 9 11:43 JavaVirtualMachines
В расширениях ничего не было, а JavaVirtualMachines - только в папке jdk1.8.0_131.jdk.
Это показывает, что установка JDK по умолчанию работает должным образом без дополнительной настройки.
Ответ 6
Во-первых, вам нужно загрузить и установить jdk8 (http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
Во-вторых, выполните некоторые проверки следующим образом:
Используется ли в вашей системе уже не связанная для оболочки оболочка java 8? Попробуйте это в терминале (да, важно указать апострофы):
$ '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java' -version
если он показывает "java-версию" 1.8.0_131 "", а затем вы можете перейти к следующему шагу.
мой скриншот
В-третьих, отредактируйте файл bash_profile:
$ vi ~/.bash_profile
и введите это:
JAVA_HOME="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib
export JAVA_HOME
export CLASSPATH
сохраните его и закройте, затем
source ~/.bash_profile
После выполнения вышеуказанных шагов и проверьте версию java
$ java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)