Первоначально это было опубликовано в 2013 году в моем блоге mbcdev. Я настраиваю новый компьютер и решил, что пора его немного обновить.

В OS X с 2003 есть очень полезная утилита, которая позволяет легко генерировать путь к JDK. Самое простое использование инструмента вернет JDK по умолчанию, которым в моем случае является обновление 131 JDK 1.8.

➜ ~ /usr/libexec/java_home 
/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home

Вы также можете попросить его перечислить все ваши JDK, используя аргумент -V. Для краткости я пропустил пути JDK.

➜ ~ /usr/libexec/java_home -V
Matching Java Virtual Machines (2):
 1.8.0_131, x86_64: "Java SE 8"
 1.7.0_17, x86_64: "Java SE 7" 

Вы также можете сделать несколько интересных вещей, например, фильтровать по архитектуре процессора:

➜ ~ /usr/libexec/java_home -a i386
➜ ~ /usr/libexec/java_home -a x86_64

Если это для вас многословно, вы можете сделать то же самое, указав также модель данных (биты):

➜ ~ /usr/libexec/java_home -d 32
➜ ~ /usr/libexec/java_home -d 64

Инструмент может делать и другие вещи, а справочная страница ясна и лаконична.

Это помогает нам, потому что мы можем просто сделать что-то подобное в наших файлах конфигурации оболочки, чтобы по умолчанию JAVA_HOME всегда указывал на последнюю версию JDK.

export JAVA_HOME=`/usr/libexec/java_home`

Эта строка обычно помещается в ~ / .bashrc, если вы используете bash, или ~ / .zshrc, если вы используете zsh. Вы также можете поместить его в / etc / profile, если хотите, чтобы он был доступен всем пользователям, а не только вам.

Естественно, если вы не хотите использовать самую последнюю и лучшую версию, вы можете указать, что вы хотите использовать 64-разрядную версию JDK 1.7 следующим образом:

export JAVA_HOME=`/usr/libexec/java_home -d 64 -v "1.7*"`

Обратные галочки `в команде важны. Они фиксируют вывод команды java_home, а затем это значение присваивается переменной среды JAVA_HOME. Наконец, эта переменная экспортируется, что означает, что она будет доступна для подпроцессов.

Это все хорошо для работы с терминалом, но графические приложения, такие как IntelliJ IDEA, потребуют дополнительной работы. Самый изящный способ, который я нашел для поддержки этого, - это добавить еще одну строку в конфигурацию вашей оболочки, например:

launchctl setenv JAVA_HOME `/usr/libexec/java_home`

В следующий раз, когда вы воспользуетесь IntelliJ, вы увидите, что JAVA_HOME распознается правильно, и с миром все в порядке.

Само собой разумеется, что эти методы также работают с GRADLE_HOME, ANDROID_HOME и практически с любой переменной окружения, которая вам нужна. Спасибо за прочтение!