Я хочу установить OpenJDK Java на Mac OSX и заставить его работать вместе с другими JDK, поскольку это более новая версия. В настоящее время я загрузил tar.gz и поместил его на свой путь, но это сложно поддерживать.
Единственная другая установка, которую я обнаружил, которая делает больше вещей автоматически, - это установка через Homebrew cask. Похоже, тоже только текущая версия:
brew cask info java
Показывает:
java: 13,33:5b8a42f3905b406298b72d750b6919f6
https://openjdk.java.net/
Так что я могу установить его оттуда, но что дальше? Я застрял только на новой версии?
Сценарии в ответах действительно включают определенные версии, хотя их легко интерпретировать для других версий. Но это также часть того, что ищут члены сообщества, поэтому полезно помочь им быстро найти правильные ответы, помогая привлечь внимание к обновленным и современным ответам и отличить от старых устаревших тем версии 6 и версии 8. Я думаю, что наличие последней стабильной версии и последней новой версии - разумные теги.
Я бы, наверное, порекомендовал использовать Jenv для управления несколькими версиями Java.




Другой альтернативой является использование SDKMAN! См. https://wimdeblauwe.wordpress.com/2018/09/26/switching-between-jdk-8-and-11-using-sdkman/
Сначала установите SDKMAN: https://sdkman.io/install, а затем ...
sdk install java 8.0.181-oraclesdk install java 11.0.0-openПереключать:
sdk use java 8.0.181-oraclesdk use java 11.0.0-openЧтобы установить значение по умолчанию:
sdk default java 8.0.181-oraclesdk default java 11.0.0-openИМХО, все дополнительные приложения / пакеты устанавливать не нужно.
Проверьте доступные версии с помощью команды:
> /usr/libexec/java_home -V
Matching Java Virtual Machines (8):
11, x86_64: "Java SE 11-ea" /Library/Java/JavaVirtualMachines/jdk-11.jdk/Contents/Home
10.0.2, x86_64: "Java SE 10.0.2" /Library/Java/JavaVirtualMachines/jdk-10.0.2.jdk/Contents/Home
9.0.1, x86_64: "Java SE 9.0.1" /Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home
1.8.0_181-zulu-8.31.0.1, x86_64: "Zulu 8" /Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
1.8.0_151, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
1.7.0_80, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
1.6.0_65-b14-468, x86_64: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_65-b14-468, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Теперь, если вы хотите выбрать Azul JDK 8 в приведенном выше списке, а НЕ Oracle Java SE 8, вызовите команду, как показано ниже:
> /usr/libexec/java_home -v 1.8.0_181
/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home
Чтобы выбрать Oracle Java SE 8, вы должны вызвать команду:
> /usr/libexec/java_home -v 1.8.0_151
/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home
Как видите, предоставленный номер версии должен быть уникальным набором строк: 1.8.0_181 vs 1.8.0_151
Разве в первом примере не должна быть строка версии 1.8.0_181-zulu-8.31.0.1? или это частичное совпадение?
На самом деле это ничего не меняет для использования версии Java, а просто сообщает местонахождение JAVA_HOME. Ручное переключение с помощью этих команд описано в моем другом ответе.
Ручное переключение системной версии по умолчанию без сторонних инструментов:
Как подробно описано в этот старый ответ, в macOS /usr/bin/java - это инструмент-оболочка, который будет использовать версию Java, указанную JAVA_HOME, или, если эта переменная не установлена, будет искать установки Java в /Library/Java/JavaVirtualMachines/ и будет использовать версию с самой высокой версией. Он определяет версии, просматривая Contents/Info.plist под каждым пакетом.
Вооружившись этими знаниями, вы сможете:
Info.plist в версиях, которые вы не хотите использовать по умолчанию (этот файл не используется самой реальной средой выполнения Java).$JAVA_HOMEЯ только что убедился, что это все еще верно для OpenJDK и Mojave.
В новой системе не установлена версия Java:
$ java -version
No Java runtime present, requesting install.
Отмените это, загрузите OpenJDK 11 и 12ea на https://jdk.java.net; установить OpenJDK11:
$ cd /Library/Java/JavaVirtualMachines/
$ sudo tar xzf ~/Downloads/openjdk-11.0.1_osx-x64_bin.tar.gz
Системная java теперь 11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
Установите OpenJDK12 (на данный момент ранний доступ):
$ sudo tar xzf ~/Downloads/openjdk-12-ea+17_osx-x64_bin.tar.gz
Системной java теперь 12:
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
Теперь давайте «спрячем» OpenJDK 12 от системной java-оболочки:
$ cd jdk-12.jdk/Contents/
$ sudo mv Info.plist Info.plist.disabled
Системная Java вернулась к 11:
$ java -version
openjdk version "11.0.1" 2018-10-16
[...]
И вы все еще можете использовать версию 12 пунктуально, вручную установив JAVA_HOME:
$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-12.jdk/Contents/Home
$ java -version
openjdk version "12-ea" 2019-03-19
[...]
и теперь это должно быть верно с AdoptOpenJDK сборки
Вот как я это сделал.
Шаг 1: Установить Java 11
Вы можете скачать Java 11 dmg для Mac отсюда: https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html
Шаг 2: После установки Java 11. Подтвердите установку всех версий. Введите следующую команду в своем терминале.
/usr/libexec/java_home -V
Шаг 3: Изменить .bash_profile
sudo nano ~/.bash_profile
Шаг 4: Добавить 11.0.1 по умолчанию. (Добавьте строку ниже в файл bash_profile).
export JAVA_HOME=$(/usr/libexec/java_home -v 11.0.1)
перейти на любую версию
export JAVA_HOME=$(/usr/libexec/java_home -v X.X.X)
Теперь нажмите CTRL + X, чтобы выйти из bash. Нажмите «Y», чтобы сохранить изменения.
Шаг 5: Перезагрузить bash_profile
source ~/.bash_profile
Шаг 6: Подтвердить текущую версию Java
java -version
Хорошее решение. Но что, если java -version все еще указывает на 8, пока я экспортировал JAVA_HOME 11?
Вопрос касается Open JDK, но вместо этого вы связались с Oracle JDK. Open JDK, похоже, не имеет установщика или инструкций по установке.
В ответ на @AlexGera - добавьте эту строку: export $ PATH = $ JAVA_HOME / bin: $ PATH
С Homebrew и jenv:
Предположение: компьютер Mac, и вы уже установили homebrew.
Установите Java с официального сайта Oracle. Вы можете установить несколько версий JDK. Он будет установлен по следующему пути:
/Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/
/Library/Java/JavaVirtualMachines/jdk1.11.0_2.jdk/
/Library/Java/JavaVirtualMachines/jdk-14.0.2.jdk/
Без jenv система будет использовать последнюю установленную java.
Если вы хотите использовать / управлять несколькими версиями, вы можете использовать jenv:
Установите и настройте jenv:
$ brew install jenv
$ echo 'export PATH = "$HOME/.jenv/bin:$PATH"' >> ~/.zshrc
$ echo 'eval "$(jenv init -)"' >> ~/.zshrc
$ source ~/.zshrc
Добавьте установленную java в jenv:
$ jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_202.jdk/Contents/Home
$ jenv add /Library/Java/JavaVirtualMachines/14.0.2.jdk/Contents/Home
Чтобы увидеть всю установленную java:
$ jenv versions
Вышеупомянутая команда предоставит список установленной java:
system
1.8
* 1.8.0.291 (set by /Users/lpatel/.jenv/version)
14
14.0
14.0.2
oracle64-1.8.0.291
oracle64-14.0.2
Настройте версию Java, которую вы хотите использовать:
$ jenv global 1.8.0.291
Error: caskroom/cask was moved. Tap homebrew/cask-cask instead, затем fatal: repository 'https://github.com/Homebrew/homebrew-cask-cask/' not foundчто сказал @ChumiestBucket - это решение имеет несколько проблем
@ChumiestBucket Я обновил решение, дайте мне знать, если у вас возникнут проблемы с этим. Спасибо !
@WestCostProjects К вашему сведению
Если на вашем компьютере установлено несколько версий, добавьте в профиль bash следующее:
export JAVA_HOME_7=$(/usr/libexec/java_home -v1.7)
export JAVA_HOME_8=$(/usr/libexec/java_home -v1.8)
export JAVA_HOME_9=$(/usr/libexec/java_home -v9)
И добавьте следующие псевдонимы:
alias java7='export JAVA_HOME=$JAVA_HOME_7'
alias java8='export JAVA_HOME=$JAVA_HOME_8'
alias java9='export JAVA_HOME=$JAVA_HOME_9'
И можете переключиться на нужную версию, используя псевдоним:
В терминале:
~ >> java7
export JAVA_HOME=$JAVA_7_HOME
да, это было рассмотрено в другом ответе здесь.
Чтобы оставаться с конкретным основным выпуском, активируйте кран AdoptOpenJDK с краном для варки, а затем установите желаемую версию с помощью установки brew cask install:
$ brew tap AdoptOpenJDK/openjdk
$ brew cask install <version>
Чтобы установить AdoptOpenJDK 14 с HotSpot, запустите:
$ brew tap AdoptOpenJDK/openjdk
$ brew cask install adoptopenjdk14
Вы можете использовать asdf для установки и переключения между несколькими версиями Java. Также есть плагины для других языков. Вы можете установить asdf с помощью Homebrew
brew install asdf
Когда asdf настроен, установите плагин java
asdf plugin-add java
Выберите версию для установки
asdf list-all java
Например, чтобы установить и настроить accepttopenjdk8
asdf install java adoptopenjdk-8.0.272+10
asdf global java adoptopenjdk-8.0.272+10
И, наконец, если необходимо, настройте JAVA_HOME для своей оболочки. Просто добавьте в свою оболочку сценарий инициализации, например ~ / .zshrc в случае zsh:
. ~/.asdf/plugins/java/set-java-home.zsh
Этот ответ расширяет отличный ответ Джейсона с более самоуверенным руководством по лучшему подходу для вашего варианта использования:
Управление версиями вручную, наверное, худший вариант. Если вы решите вручную переключать версии, вы можете использовать этот код Bash вместо подробного кода Джейсона (фрагмент кода из README - homebrew-openjdk:
jdk() {
version=$1
export JAVA_HOME=$(/usr/libexec/java_home -v"$version");
java -version
}
Ответ Джейсона предоставляет основные команды для SDKMAN и jenv. Вот дополнительная информация о SDKMAN и дополнительная информация о Jenv, если вы хотите получить больше информации об этих инструментах.
Вы можете установить версию JDK любым способом.
Затем я рекомендую использовать JENV для переключения между различными версиями и использования JDK, который вам нужен глобально или локально.
Вы можете найти более подробную информацию о том, как установить и использовать JENV здесь -> https://blog.adamgamboa.dev/2021/06/17/using-jenv-to-switch-jkd-versions/
Просто спрашиваю, можем ли мы ограничить вопросительные теги одной версией? Поскольку в любом случае нет такого сценария / шагов установки для конкретной версии. Это общий (не связанный с версией) вопрос, и его может быть достаточно пометить только java-11, поскольку я предполагаю, что это то место, где люди начнут искать, что предлагают вопрос и ответ.