Версия Mac OSX Java Terminal неверна

Хорошо, я немного новичок в Mac и OSX, но я выбрал один из них, чтобы я мог выполнить некоторые проблемы с поиском неисправностей на моих Java-программах, поскольку компания, с которой я работаю, использует комбинацию машин OSX и Windows. Проблема, с которой я сталкиваюсь, заключается в том, что, когда я устанавливаю Java 7 с сайта Oracle, он обновляет меню настроек и, как представляется, корректно выполняет .jar файлы при двойном щелчке по ним, но версия окна терминала по-прежнему равна 1.6.0_43 и запускает тот же .jar файл из терминала приводит к ошибкам во время выполнения из-за более старой версии.

Когда я перехожу в /Library/Java/JavaVirtualMachines/, я получаю пустую папку. Из того, что я видел в других статьях, это то, где должна быть папка версии Java 1.7.0. Любая идея, что происходит? Как я могу заставить терминал использовать правильную версию Java?

Изменить: @DWilches комментировать исходный ответ: (1)

total 64
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 17 21:38 1.6.0 -> CurrentJDK
drwxr-xr-x  8 root  wheel  272 Mar 17 21:38 A
lrwxr-xr-x  1 root  wheel    1 Mar 17 21:38 Current -> A
lrwxr-xr-x  1 root  wheel   59 Mar 17 21:38 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

(2)

ls -ld /usr/bin/java
lrwxr-xr-x  1 root  wheel  74 Mar 17 21:38 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java

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

Ответ 1

JDK

В Mac OS /usr/bin/java и друзья - это заглушки, которые делегируют реальные команды JDK. Эти заглушки уважают настройку вашей переменной среды JAVA_HOME, но для этого вам нужно установить JDK (от http://www.oracle.com/technetwork/java/javase/downloads/index.html), в отличие от JRE ( от http://java.com).

JDK устанавливается в /Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk (для любого значения NN), поэтому установите переменную среды JAVA_HOME в /Library/Java/JavaVirtualMachines/jdk1.7.0_NN.jdk/Contents/Home, чтобы сделать /usr/bin/java использовать 1.7. Вы можете вернуться к 1.6 просто, указав вместо этого JAVA_HOME на /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home. Вы можете использовать инструмент /usr/libexec/java_home для автоматического поиска правильного значения, например, чтобы сделать /usr/bin/java использование Java 7, которое вы можете сделать

export JAVA_HOME=`/usr/libexec/java_home -v '1.7*'`

и чтобы он использовал Java 6, вы можете сделать

export JAVA_HOME=`/usr/libexec/java_home -v '1.6*'`

То же самое относится к Java 8 (используя -v '1.8*'). Это подберет самую последнюю установленную JDK для соответствующей основной версии, вам не нужно забывать менять NN вручную при установке обновления.

JRE

Если вы хотите запустить 1.7 или 1.8 JRE из командной строки, его можно найти в /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java. Это фиксированный путь, и вы можете установить только одну "публичную" JRE в любой момент времени.

$ /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build 1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01, mixed mode)

Вы можете использовать псевдоним оболочки в своем .bashrc

alias java_jre='/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java'

Ответ 2

Проблема заключается в том, что установка Oracle JRE не изменяет исполняемый файл /usr/bin/java. Если вы хотите использовать эту Java, вам нужно использовать путь в /Library (нужно найти, что это такое, у меня установлена ​​JDK, поэтому может быть иная)

В соответствии с Oracle JRE установочный документ

Установка JRE из Oracle не будет обновлять символические ссылки java -version или добавьте java на свой путь. Чтобы это сделать, вам необходимо установить JDK.

Oracle JDK меняет /usr/bin/java, чтобы указать на исполняемый файл Java 7. Если вы занимаетесь разработкой, вы должны использовать это, поскольку оно включает в себя больше, чем JRE.

Oracle установить часто задаваемые вопросы говорит

В: Должен ли я установить JRE или JDK?

A: Если вы планируете запускать Java-приложения, установите Java Runtime Окружающая среда (JRE). JRE также упоминается как Oracle Java. однажды вы установили JRE, вы можете запускать Java-апплеты и приложения, дважды щелкнув файлы JAR, файлы JNLP и через браузер. Обратите внимание, что 32-разрядные браузеры, такие как Firefox в 32-битном режиме, и Chrome, не поддерживаются JRE.

Если вы планируете писать Java-приложения, установите Java Development Kit (JDK).

Ответ 3

Сначала вы покинули консоль и снова открыли ее, чтобы иметь возможность вносить изменения в переменную PATH?

Если вы уже это сделали, проверьте, какая версия Java по умолчанию:

[email protected] ~$ cd /System/Library/Frameworks/JavaVM.framework/Versions/
[email protected] Versions$ ls -l
lrwxr-xr-x  1 root  wheel   59 Mar 19 10:07 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.6.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.6 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.5.0 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.5 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.4.2 -> CurrentJDK
lrwxr-xr-x  1 root  wheel   10 Mar 19 10:07 1.4 -> CurrentJDK
lrwxr-xr-x  1 root  wheel    1 Mar 19 10:08 Current -> A
drwxr-xr-x  8 root  wheel  272 Mar 25 10:03 A

Теперь вы можете видеть, что "Текущая" версия - "A" (это мой Java7). Если бы я хотел изменить его на Java 1.6, я мог бы написать:

[email protected] Versions$ sudo unlink Current
[email protected] Versions$ sudo ln -s 1.6 Current

И затем:

[email protected] Versions$ java -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01-447-11M4203)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01-447, mixed mode)

Таким образом, вы можете использовать это, чтобы сделать "Текущую" точку в желаемом месте Java.

Ответ 4

Как и Ян, но, вероятно, вы хотите, чтобы java7 вызывался из .sh script, поэтому вам нужна функция вместо псевдонима, добавленного в .bash_profile:

java7() {
    /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java "[email protected]"
}
export -f java7