Как вернуться к 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 не похоже на то, что это поможет.
Ответы
Ответ 1
Инструменты командной строки 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)
Ответ 2
Если вам нужно написать код, который вы хотите запустить в предыдущей версии Java, вы можете изменить флаги компиляции. Это может быть все, что вам нужно, и
например.
javac -source 1.6 -target 1.6 MyClass.java
Источник arg утверждает, что источник написан в этой версии Java, поэтому List<String> strings = new ArrayList<>();
будет ошибкой компиляции. Target сообщает компилятору компилировать байт-код, который нацелен на указанную версию JVM. Хотя я думаю, что 1.7 полностью обратно совместимо с 1.5 и 1.6.
Ответ 3
У меня возникла аналогичная проблема. После установки 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)