Подтвердить что ты не робот

После перехода на 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 для установки?

4b9b3361

Ответ 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)