Как установить или изменить версию Java (JDK) по умолчанию на OS X?

Как вы можете изменить версию Java по умолчанию на mac?

Ответ 1

Сначала запустите /usr/libexec/java_home -V который выведет что-то вроде следующего:

Matching Java Virtual Machines (3):
1.8.0_05, x86_64:   "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
1.6.0_65-b14-462, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-462, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home

Выберите версию по умолчанию (1.6.0_65-b14-462 для аргументов), затем:

export JAVA_HOME='/usr/libexec/java_home -v 1.6.0_65-b14-462'

или вы можете указать только основную версию, например:

export JAVA_HOME='/usr/libexec/java_home -v 1.8'

Теперь, когда вы запустите 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)

Просто добавьте строку export JAVA_HOME… в файл инициализации оболочки.

Для Баша (как утверждает антоних):

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Ответ 2

Этот ответ представляет собой попытку решить: как управлять версией java в общесистемной среде (не только в текущей запущенной оболочке), когда несколько версий JDK устанавливаются для целей разработки на macOS El Capitan или новее (Sierra, High Sierra, Mojave). Насколько я могу судить, ни один из текущих ответов не делает этого (*).

Как разработчик, я использую несколько JDK, и я хочу легко переключаться с одного на другой. Обычно у меня есть последняя стабильная для общего использования, а другая для тестов. Но я не хочу, чтобы система (например, при запуске моей IDE) использовала последнюю версию "раннего доступа", которую я имею сейчас. Я хочу управлять системным дефолтом, и это должно быть последним стабильным.

Следующий подход работает как минимум с Java 7 до 12 (ранний доступ на момент написания этой статьи), с Oracle JDK или OpenJDK (включая сборки AdoptOpenJDK, выпущенные после середины октября 2018 года).

Решение без сторонних инструментов:

  • оставьте все JDK в своем местоположении по умолчанию, в разделе /Library/Java/JavaVirtualMachines. По умолчанию система будет выбирать самую высокую версию.
  • Чтобы исключить выбор JDK по умолчанию, переименуйте его Contents/Info.plist в Info.plist.disabled. Этот JDK можно использовать, когда $JAVA_HOME указывает на него или явно ссылается на скрипт или конфигурацию. Системная команда java просто игнорируется.

System launcher будет использовать JDK с самой высокой версией среди тех, у которых есть файл Info.plist.

При работе в оболочке с альтернативным JDK выберите свой метод среди существующих ответов (jenv или пользовательские псевдонимы/скрипты вокруг /usr/libexec/java_home и т.д.).


Подробности расследования в этом контексте.


(*) Текущие ответы либо устарели (более недействительны для macOS El Capitan или Sierra), либо адресованы только одному JDK, либо не относятся к общесистемному аспекту. Многие объясняют, как изменить $JAVA_HOME, но это влияет только на текущую оболочку и то, что запускается оттуда. Это не повлияет на приложение, запущенное с панели запуска ОС (если вы не изменили правильный файл и не вышли из системы/вход в систему, что является утомительным). То же самое для jenv, это круто и все, но насколько я могу сказать, он просто меняет переменные окружения, поэтому он имеет такое же ограничение.

Ответ 3

Добавляя к приведенным выше ответам, я помещаю следующие строки в свой .bash_profile что делает его очень удобным для переключения (включая комментарий @elektromin для java 9):

alias j12="export JAVA_HOME='/usr/libexec/java_home -v 12'; java -version"
alias j11="export JAVA_HOME='/usr/libexec/java_home -v 11'; java -version"
alias j10="export JAVA_HOME='/usr/libexec/java_home -v 10'; java -version"
alias j9="export JAVA_HOME='/usr/libexec/java_home -v 9'; java -version"
alias j8="export JAVA_HOME='/usr/libexec/java_home -v 1.8'; java -version"
alias j7="export JAVA_HOME='/usr/libexec/java_home -v 1.7'; java -version"

После вставки выполните $ source.bash_profile

Я могу переключиться на Java 8, набрав следующее:

$ j8
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

Ответ 4

Маленькая функция рыбы, основанная на /usr/libexec/java _home

function jhome
    set JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

Если вы не используете рыбу, вы можете сделать что-то подобное в bash:

#!/bin/bash

jhome () {
  export JAVA_HOME=`/usr/libexec/java_home [email protected]`
  echo "JAVA_HOME:" $JAVA_HOME
  echo "java -version:"
  java -version
}

Затем для переключения между javas do:

$> jhome           #switches to latest java
$> jhome -v 1.7    #switches to java 1.7
$> jhome -v 1.6    #switches to java 1.6

ref: https://gist.github.com/kenglxn/1843d552dff4d4233271

Ответ 5

Использовать jenv - это простой способ.

1.Установить jenv

    curl -s get.jenv.io | bash

2.Config jenv

    cd ~/.jenv/candidates/
    mkdir java
    cd java
    mkdir 1.7
    mkdir 1.8

3.Symlink путь jdk

    ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.7
    ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin ~/.jenv/candidates/java/1.8

4.Вы все установлены

команда switch:

jenv использовать java 1.8

установить значение по умолчанию:

jenv default java 1.7

Ответ 6

Это немного сложно, но постарайтесь выполнить шаги, описанные в Установка Java на OS X 10.9 (Mavericks). В принципе, вам нужно обновить свой псевдоним до java.

Шаг за шагом:

После установки JDK 1.7 вам нужно будет сделать sudo ln -snf, чтобы изменить ссылку на текущий java. Для этого откройте терминал и выполните команду:

sudo ln -nsf /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents \
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK

Обратите внимание, что каталог jdk1.7.0_51.jdk может меняться в зависимости от установленной версии SDK.

Теперь вам нужно установить JAVA_HOME, чтобы указать, где был установлен jdk_1.7.0_xx.jdk. Откройте снова терминал и введите:

export JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home"

Вы можете добавить строку export JAVA_HOME выше в вашем файле .bashrc, чтобы иметь java навсегда в терминале

Ответ 7

установить JDK, а не только JRE

/usr/libexec/java_home -v 1.8

дает

/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

Далее

touch .bash_profile

open -a TextEdit.app .bash_profile

TextEdit покажет вам пустую страницу, которую вы можете заполнить.

добавить в документ:   export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home

в терминале:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)"

попробуйте выполнить команду:

javac -version

должен выводиться:

javac 1.8.0_111

Ответ 8

Используйте jenv, это как менеджер среды Java. Это супер легко использовать и чистить

Для Mac выполните следующие действия:

brew install jenv

git clone https://github.com/gcuisinier/jenv.git ~/.jenv

Установка: Если вы используете bash, выполните следующие действия:

$ echo 'export PATH="$HOME/.jenv/bin:$PATH"' >> ~/.bash_profile

echo 'eval "$(jenv init -)"' >> ~/.bash_profile

$ exec $SHELL -l

Добавьте нужные версии JVM в jenv:

jenv add /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

jenv add /System/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home

Проверьте установленные версии:

jenv versions

Установите версию Java, которую вы хотите использовать:

jenv global oracle64-1.6.0

Ответ 9

ТЛ; др

Добавьте строку:

export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home'

в файл

~/.bash_profile

(замените jdk1.8.0_144.jdk загруженной версией)

затем source ~/.bash_profile

Ответ 10

function setjdk() {
  if [ $# -ne 0 ]; then
    removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
    if [ -n "${JAVA_HOME+x}" ]; then
      removeFromPath $JAVA_HOME
    fi
    export JAVA_HOME=`/usr/libexec/java_home -v [email protected]`
    export PATH=$JAVA_HOME/bin:$PATH
  fi
}

поместите это в свой файл ~/.profile и используйте его в своем терминале так: setjdk 1.8, setjdk 1.7, setjdk 9 и т.д. и т.д....

Если у вас нет removeFromPath, то это:

function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") }

Ответ 11

На официальной странице Apple java_home (1):

**USAGE**

   /usr/libexec/java_home  helps  users  set a $JAVA_HOME in their login rc files, or provides a way for
   command-line Java tools to use the most appropriate JVM which can satisfy a minimum version or archi-
   tecture  requirement.  The --exec argument can invoke tools in the selected $JAVA_HOME/bin directory,
   which is useful for starting Java command-line tools from launchd plists without hardcoding the  full
   path to the Java command-line tool.

   Usage for bash-style shells:
          $ export JAVA_HOME='/usr/libexec/java_home'

   Usage for csh-style shells:
          % setenv JAVA_HOME '/usr/libexec/java_home'

Ответ 12

Если вы еще не можете установить его. используя эту команду.

экспорт JAVA_HOME = /usr/libexec/java_home -v 1.8

то вы должны использовать этот.

экспорт JAVA_HOME = $(/usr/libexec/java_home -v 1.8)

он, безусловно, будет работать.

Ответ 13

Сначала узнайте, где вы храните окружающую среду variables-

  1. Emacs
  2. bash_profile
  3. Файл zshrc

Шаги по настройке переменной окружения: -

  1. Загрузите jdk из JAVA
  2. установить его двойным щелчком
  3. Теперь настройте переменные среды в файле

    а. Для emacs.profile вы можете использовать эту ссылку или посмотреть скриншот ниже

enter image description here

б. Для настройки профиля ZSH -

1. export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

2. source ~/.zshrc - Restart zshrc to reflect the changes.

3. echo $JAVA_HOME - make sure path is set up properly 
   ----> /Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home

4. java -version 

   -->  java version "1.8.0_112"  Java(TM) SE Runtime Environment (build 1.8.0_112-b16)Java HotSpot(TM) 64-Bit Server VM (build 25.112-b16, mixed mode)

Все настройки Теперь вы можете легко обновить или разложить версию JAVA.

Ответ 14

Переключатель JDK Script

Я адаптировал ответ из @Alex выше и написал следующее, чтобы исправить код для Java 9.

$ cat ~/.jdk
#!/bin/bash

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() {
  echo "Switching java version $1";

  requestedVersion=$1
  oldStyleVersion=8
  # Set the version
  if [ $requestedVersion -gt $oldStyleVersion ]; then
    export JAVA_HOME=$(/usr/libexec/java_home -v $1);
  else
    export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`;
  fi

  echo "Setting JAVA_HOME=$JAVA_HOME"

  which java
  java -version;
}

Переключиться на Java 8

$ jdk 8
Switching java version 8
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home
/usr/bin/java
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)

Переключиться на Java 9

$ jdk 9
Switching java version 9
Setting JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
/usr/bin/java
java version "9.0.1"
Java(TM) SE Runtime Environment (build 9.0.1+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

Ответ 15

добавьте следующую команду в файл ~/.zshenv

export JAVA_HOME='/usr/libexec/java_home -v 1.8' 

Ответ 16

Если вы используете рыбу, и вы используете mac, и вы хотите иметь возможность переключаться между JDK, тогда ниже работает для меня на mac.

Ответ @kenglxn не работал для меня, и я понял, что bcos не установил -g, который является глобальным!

Поместите ниже под ~/.config/fish/config.fish

alias j8="jhome  -v 1.8.0_162"
alias j9="jhome  -v 9.0.1"

function jhome
    set -g -x JAVA_HOME (/usr/libexec/java_home $argv)
    echo "JAVA_HOME:" $JAVA_HOME
    echo "java -version:"
    java -version
end

funcsave jhome

Чтобы узнать, какая версия/младшая версия вы установили, вы можете:

/usr/libexec/java_home -V                                                                              579ms  Wed 14 Feb 11:44:01 2018
Matching Java Virtual Machines (3):
    9.0.1, x86_64:  "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
    1.8.0_162, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    1.8.0_121, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home

Ответ 17

Если у вас несколько версий и вы хотите что-то запускать с помощью определенной версии, используйте этот пример:

/usr/libexec/java_home -v 1.7.0_75 --exec java -jar you-file.jar

Ответ 18

Основываясь на ответе @markhellewell, я создал пару функций псевдонима, которые сделают это для вас. Просто добавьте их в файл запуска оболочки

#list available jdks
alias jdks="/usr/libexec/java_home -V"
# jdk version switching - e.g. `jdk 6` will switch to version 1.6
function jdk() { 
  echo "Switching java version"; 
  export JAVA_HOME=`/usr/libexec/java_home -v 1.$1`; 
  java -version; 
}

https://gist.github.com/Noyabronok/0a90e1f3c52d1aaa941013d3caa8d0e4

Ответ 19

Простой способ включить отдельно установленный JDK в список, указанный в /usr/libexec/java_home -V состоит в том, чтобы /usr/libexec/java_home -V символическую ссылку на каталог следующим образом:

sudo ln -s path/to/jdk /Library/Java/JavaVirtualMachines/jdk-[some-identifier].jdk

Например, чтобы зарегистрировать JDK, включенный в Android Studio (1.8.0_152 на момент написания), используйте:

sudo ln -s /Applications/Android\ Studio.app/Contents/jre/jdk /Library/Java/JavaVirtualMachines/jdk-android-studio.jdk

Теперь java_home перечислит JDK в разделе " Matching Java Virtual Machines и вы можете выбрать его, как описано выше.

Ответ 20

Этот инструмент будет работать для вас:

http://www.guigarage.com/2013/02/change-java-version-on-mac-os/

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

Ответ 21

Я прочитал все решения, и я чувствую, что гораздо более легкие решения - использовать Homebrew jenv для управления несколькими jdks.

Теперь пришло время установить jEnv:

варить установку jenv

Добавьте следующие строки в ~/.bash_profile. Это приведет к инициализации jEnv.

# Init jenv, если jenv>/dev/null; затем eval "$ (jenv init -)"; фи

jEnv не устанавливает JDK, поэтому мы должны сказать jEnv, где искать их. Введите эти команды для регистрации JDK в jEnv (замените младшие и исправленные версии вашими):

jenv add/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/

jenv add/Library/Java/JavaVirtualMachines/jdk1.8.0_66.jdk/Contents/Home/

После этого запустите эту команду, чтобы перечислить все зарегистрированные JDK:

Варианты jenv

В моем случае мне нужно сохранить JDK 7 в качестве моей версии по умолчанию, поэтому я установил глобальную версию в 1.7:

jenv global oracle64-1.7.0.79

И в моем проекте я установил локальную версию JDK в 1,8:

CD

jenv local oracle64-1.8.0.66

Вышеприведенная команда создаст файл.java-версии в корне проекта. Его содержание - это версия, которую я только что выбрал для этого проекта:

oracle64-1.8.0.66

Ответ 22

Вот как я делаю это на моем Linux (Ubuntu/Mint mate), я думаю, что Mac может сделать это аналогичным образом.


Установить и настроить

шаги:

  • [Основное - часть]
  • Загрузите jdk (файл .tgz) вручную.
  • Распакуйте и переименуйте правильно, в нужном месте.
    например, /mnt/star/program/java/jdk-1.8
  • Сделайте программную ссылку, которая будет изменена для переключения версии Java позже.
    например, ln -s/mnt/star/program/java/jdk-1.8/mnt/star/program/java/java
    Таким образом /mnt/star/program/java/java является мягкой ссылкой.
  • Установите JAVA_HOME в стартовом скрипте.
    Может использовать файл типа /etc/profile.d/eric.sh или просто использовать ~/.bashrc.
    например, JAVA_HOME=/mnt/star/program/java/java
  • Затем откройте новую оболочку bash. java -version должен распечатать версию Java.
  • [Больше версия - часть]
  • При необходимости загрузите и установите больше версий Java, как описано выше.
    например
    /mnt/star/program/java/jdk-11
  • [Переключатель - часть]
  • В ~/.bashrc определите переменную для различных версий Java.
    например
    _E_JAVA_HOME_11='/mnt/star/program/java/jdk-11'
    _E_JAVA_HOME_8='/mnt/star/program/java/jdk-8'
    # dir of default version,
    _E_JAVA_HOME_D=$_E_JAVA_HOME_8
  • В ~/.bashrc определите команду для переключения версии Java.
    например
    ## switch java version,
    alias jv11="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_11 $JAVA_HOME"
    alias jv8="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_8 $JAVA_HOME"
    # default java version,
    alias jvd="rm $JAVA_HOME; ln -s $_E_JAVA_HOME_D $JAVA_HOME"
    alias jv="java -version"
  • В терминале source ~/.bashrc чтобы изменения вступили в силу.
  • Затем можно переключиться с помощью определенных команд.

Команды - сверху конфиг

Команды:

  • jv11
    Переключиться на Java 11
  • jv8
    Переключиться на Java 8
  • jvd
    Переключитесь на версию Java по умолчанию, которая обозначена _E_JAVA_HOME_D определенной выше.
  • jv
    Показать версию Java.

Пример вывода:

[email protected]:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

[email protected]:~$ jv11
[email protected]:~$ jv
java version "11.0.1" 2018-10-16 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.1+13-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.1+13-LTS, mixed mode)

[email protected]:~$ jvd
[email protected]:~$ jv
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

[email protected]:~$ 

Механизм

  • Он переключается путем изменения программной ссылки, которая используется как JAVA_HOME.

подсказки

  • На моей машине, когда я устанавливаю jdk вручную, я сохраняю минорную версию, затем делаю мягкую ссылку с основной версией, но без минорной версии.
    например
    // это фактический каталог,
    jdk1.8.0_191

    //это мягкая ссылка на jdk1.8.0_191
    jdk-8

    //это мягкая ссылка на jdk-8 или jdk-11
    java

  • Я определяю псевдоним команды в ~/.bashrc, но определяю переменную в отдельном файле.
    Я использую ~/.eric_var для определения переменных, и ~/.bashrc будет его источником (например, source $HOME/.eric_var).

Ответ 23

СЛИШКОМ ЛЕГКОЕ РЕШЕНИЕ: какая головная боль - это было быстрое легкое решение, которое сработало для меня.

Mac OS Sierra Version 10.12.13

  • Используйте сочетания клавиш: CMD + SHIFT + G - введите в "/Library/"

  • Найдите папку JAVA

  • Щелкните правой кнопкой мыши папку Java = переместить в корзину (требуется пароль)

  • Установка: Java SE Development Kit 8 jdk-8u131-macosx-x64.dmg | Загрузить Javascript SDK

  • Убедитесь, что новая папка JAVA отображается в /LIBRARY/
  • Установить Eclipse | Установить Eclipse IDE для разработчиков Java
  • Boom Done