Первоначально это было опубликовано в 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 и практически с любой переменной окружения, которая вам нужна. Спасибо за прочтение!