it-swarm.com.ru

Как вернуться к Java 1.6 в Mac OS X 10.7.5

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

Я немного работал с символическими ссылками, но независимо от того, что я делаю, 

Java -version

в терминале всегда приводит к 

Daves-MacBook-Pro:core-server dave$ Java -version
Java version "1.7.0_07"
Java(TM) SE Runtime Environment (build 1.7.0_07-b10)
Java HotSpot(TM) 64-Bit Server VM (build 23.3-b01, mixed mode)

Мое приложение работает с GAE, который вообще не использует Java 1.7. Поэтому я не могу скомпилировать свой код, используя 1.7! Я должен использовать 1.6, но мне не удалось найти способ удалить 1.7 или иным образом заставить сборку/компиляцию произойти на 1.6. 

И последнее замечание: я запускаю инструмент сборки в командной строке, поэтому изменение настроек проекта в Eclipse не похоже на то, что это поможет. 

24
Davek804

Инструменты командной строки Java, javac и т.д. Чувствительны к значению переменной среды Java_HOME и будут использовать 1.6, если эта переменная указывает на 1.6 JDK. Инструмент /usr/libexec/Java_home ваш друг здесь. Бег

/usr/libexec/Java_home

распечатает соответствующее значение Java_HOME для самой последней версии JDK в вашей системе. Это будет Java 7, но вы можете применять ограничения, например, с помощью флага -v

/usr/libexec/Java_home -v '1.6*'

вернет значение Java_HOME для лучшего из доступных 1.6 JDK в вашей системе. Вы можете использовать это значение для установки Java_HOME:

export Java_HOME=`/usr/libexec/Java_home -v '1.6*'`

либо как разовый для определенного сеанса терминала, либо навсегда для всех будущих сеансов терминала, добавив вышеуказанную строку в файл .bash_profile в вашем домашнем каталоге.


$ export Java_HOME=`/usr/libexec/Java_home -v '1.6*'`
$ Java -version
Java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
$ export Java_HOME=`/usr/libexec/Java_home -v '1.7*'`

$ Java -version
Java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
69
Ian Roberts

Если вам нужно написать код, который вы хотите запустить в предыдущей версии Java, вы можете изменить флаги компиляции. Это может быть все, что вам нужно и 

например.

javac -source 1.6 -target 1.6 MyClass.Java

Аргумент source утверждает, что источник написан на этой версии Java, поэтому List<String> strings = new ArrayList<>(); будет ошибкой компиляции. Target указывает компилятору компилировать байт-код, который предназначен для указанной версии JVM. Хотя я думаю, что 1.7 полностью обратно совместимо с 1.5 и 1.6.

1
Dunes

Я столкнулся с подобной проблемой. После установки JDK7 некоторые из моих приложений перестали работать. Мне нужно было вернуться к JDK6, и я сделал это по-другому. Я заметил, что в моей /System/Library/Frameworks/JavaVM.framework/Versions/ он показал следующее:

lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Oct 25 17:01 1.6.0 -> CurrentJDK
drwxr-xr-x  8 root  wheel  272 Oct 25 18:06 A
lrwxr-xr-x  1 root  wheel    1 Oct 25 17:01 Current -> A
lrwxr-xr-x  1 root  wheel   59 Nov 20 21:40 CurrentJDK -> /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/

поэтому я удалил символическую ссылку CurrentJDK

 Sudo rm CurrentJDK

и заново создал символическую ссылку, указывающую на JDK6, который все еще на моем Mac

Sudo ln -s  /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/ CurrentJDK

и это помогло мне

Java -version
   Java version "1.6.0_65"
   Java(TM) SE Runtime Environment (build 1.6.0_65-b14-462-11M4609)
   Java HotSpot(TM) 64-Bit Server VM (build 20.65-b04-462, mixed mode)
0
binhn