После установки Java JDK 7 для Mac OS X - mvn -version по-прежнему показывает версию java 1.6.0_31

117

Oracle выпустила Java JDK 7 26 апреля для Mac OS X. Я выполнил инструкции по установке, и когда я выполняю java -version в окне терминала, я получаю:

java version "1.7.0_04"
Java(TM) SE Runtime Environment (build 1.7.0_04-b21)
Java HotSpot(TM) 64-Bit Server VM (build 23.0-b21, mixed mode)

Однако когда я это делаю mvn -versionв окне терминала, я получаю:

Apache Maven 3.0.2 (r1056850; 2011-01-08 18:58:10-0600)
Java version: 1.6.0_31, vendor: Apple Inc.
Java home: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
Default locale: en_US, platform encoding: MacRoman
OS name: "mac os x", version: "10.7.3", arch: "x86_64", family: "mac"

Как я могу заставить Maven использовать Java JDK 1.7.0_04?

Спасибо за помощь.

Брюс Филлипс
источник

Ответы:

126

Наконец нашел ответ здесь:

http://www.adam-bien.com/roller/abien/entry/java_se_development_kit_7

JAVA_HOME=$(/usr/libexec/java_home)Вместо этого вы должны использовать его на Mac, а затем установить текущий jdk через "Java Preferences.app".

Установите JAVA_HOME в ~ / .profile

Брюс Филлипс
источник
4
Я недавно установил Java 6 и не могу найти JavaPreferences.app bcz mac теперь не поддерживает Java. Теперь можете сказать, как мне установить jvm без использования JavaPreferences.
amod
2
Вы можете принять свой ответ. Это покажет всем остальным, что это решило эту проблему. И у вас будет еще 10
понтов
5
Я добавил в ~ / .bash_profile: export JAVA_HOME = $ (/ usr / libexec / java_home)
skytteren
1
Или вы можете сделать «export JAVA_HOME = $ (/ usr / libexec / java_home -v 1.6)» за один раз вместо изменения с помощью Java Preferences.app
mac
не удалось открыть приложение Java Preferences в El Captian, я перешел из System Preferences -> Java.
Wolf7176,
34

Проблема в том, что символическая ссылка «CurrentJDK» внутри версий JavaVm.framework указывает на старый jdk, поэтому, когда я использовал следующие команды, чтобы установить CurrentJDK на последнюю версию (1.7.0_45), она работает

cd /System/Library/Frameworks/JavaVM.framework/Versions
sudo rm CurrentJDK
sudo ln -s /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents CurrentJDK

ссылка: http://java.dzone.com/articles/installing-jdk-7-mac-os-x

Махмуд Адам
источник
убедитесь, что вы указали правильную версию jdk1.7.0_45.jdk, моя былаjdk1.7.0_51.jdk
ndequeker 09
1
Интересно, почему разработчики Oracle не сделали это автоматически? Для меня это нетривиально. Этот ответ спас мне день.
Иван
это не работает для меня. Я на эль-капитане. Java-версия mvn отказывается изменяться. JAVA_HOME является точным
Wolf7176
17

Чтобы найти путь в настройках Java, попробуйте /usr/libexec/java_home -X

Моя запись Java7 выглядит так:

<dict>
    <key>JVMArch</key>
    <string>x86_64</string>
    <key>JVMBundleID</key>
    <string>com.oracle.java.7u04.jdk</string>
    <key>JVMEnabled</key>
    <true/>
    <key>JVMHomePath</key>
    <string>/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home</string>
    <key>JVMIsBuiltIn</key>
    <false/>
    <key>JVMName</key>
    <string>Java SE 7</string>
    <key>JVMPlatformVersion</key>
    <string>1.7</string>
    <key>JVMVendor</key>
    <string>Oracle Corporation</string>
    <key>JVMVersion</key>
    <string>1.7.0_04</string>
</dict>
dmolony
источник
6
grrrrr, я это сделал, и путь, который он перечисляет для моего jdk1.7, вообще не существует :(
Дин Хиллер
9

Вам нужно изменить JAVA_HOMEпеременную среды на новое место JDK 1.7.

Посмотрите на этот вопрос, чтобы узнать о возможных местах, где можно определить JAVA_HOME. В терминале введите, which javaчтобы найти путь к вашей установке Java, а затем обновите, JAVA_HOMEчтобы указать на этот путь (но исключите конечную папку bin).

Nate
источник
Вы уверены, что мне это нужно на Mac OS X? Раньше мне не приходилось делать этого. Если мне нужно установить JAVA_HOME, как мне узнать, какой путь использовать, поскольку установка Java JDK 7 не дала мне никакой информации о пути установки, а приложение утилиты Java Preference на Mac не показывает путь к JDK 1.7
Брюс Филлипс
Если вы посмотрите на свой вопрос выше, вы увидите, что JAVA_HOME уже определен и в настоящее время указывает на старый 1.6 JDK. Я не знаком с тем, как изменять переменные среды в OSX, но это то, что Maven использует по умолчанию.
Nate
Проблема в том, что обновление Apple обычно обновляет версию java и устанавливает значение JAVA_HOME. Установка значения JAVA_HOME в .bashrc не работает в OS X, как в Linux. Также я не могу найти путь к JDK 7, установленному Oracle.
Брюс Филлипс,
Также, Нейт, мой вопрос НЕ дублирует сообщение, на которое вы ссылаетесь. Я использую OS X и обновился до Java JDK 7, используя установку Oracle для Mac OS X, которая была выпущена только 26 апреля.
Брюс Филлипс,
Ни один Mac вместо .bashrc не использует .bash_profile, и вы сможете найти установку в / System / Library / Java / JavaVirtualMachines /, где вам нужно указать новую версию Java 1.7.0
peter_budo
7

В случае, если кто-то устанавливает Maven на 64-битный Mac под управлением Mac OSX «Mavericks», сэкономьте себе время и немного потрудитесь, пытаясь установить Maven. Я пытался следить за этим (что не удалось, потому что расположение java_home изменилось на Mavericks:

http://maven.apache.org/download.cgi

Я рвал на себе волосы, пока не нашел этот веб-сайт, на котором рекомендуется установить homebrew и следовать инструкциям на этой странице: http://techspunky.blogspot.in/2013/10/how-to-install-maven-on-mac -osx-109.html

после завершения не паникуйте, если $ maven -version не работает, вместо этого используйте $ mvn --version, как рекомендуется maven.apache.org/download.cgi.

Это сработало, но затем я заметил, что Maven использует Java SDK версии Java: 1.6.0_65, что не является последним SDK, который я установил в системе.

Как только я установил JAVA_HOME =/usr/libexec/java_home

Он использовал правильный SDK: Maven home: /usr/local/Cellar/maven/3.1.1/libexec Версия Java: 1.7.0_45, поставщик: Oracle Corporation Домашняя страница Java: /Library/Java/JavaVirtualMachines/jdk1.7.0_45. jdk / Contents / Home / jre Локаль по умолчанию: en_US, кодировка платформы: UTF-8 Имя ОС: «mac os x», версия: «10.9», архитектура: «x86_64», семейство: «mac»

Успех! но подождите ... в следующий раз, когда я открыл терминал и запустил mvn -v, он вернулся к версии java 1.6. WTH!

это своего рода предполагаемая ошибка из того, что я читал: echo JAVA_HOME = /usr/libexec/java_home -v 1.7| sudo tee -a / etc / mavenrc

и сейчас:

Домашняя страница Maven: /usr/local/Cellar/maven/3.1.1/libexec Версия Java: 1.7.0_45, поставщик: Oracle Corporation Домашняя страница Java: /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre Локаль по умолчанию: en_US, кодировка платформы: UTF-8 Имя ОС: «mac os x», версия: «10.9», архитектура: «x86_64», семейство: «mac»

ConfusedDeer
источник
export JAVA_HOME=`/usr/libexec/java_home` у меня хорошо сработало, чтобы правильно экспортировать переменную JAVA_HOME.
cdeszaq
4

Причина, по которой Maven все еще использует Java 6, заключается в том, что запускающий его скрипт / usr / bin / mvn не использует правильный метод OS / X для разрешения текущей версии Java, как указано в настройках Java. Подробнее см. Эту проблему Maven:

http://jira.codehaus.org/browse/MNG-4226

Голосование может исправить это; тем временем, если вы измените сценарий / usr / bin / mvn, как показано в комментариях и исправлении по этой проблеме, вы получите желаемый результат.

Роберт Эллиот
источник
2

Хорошо на моей машине. Да, установщик Oracle не совсем выполнил свою работу, и меня это до бесконечности смутило после того, как 1.6 все еще работала.

java run time was updated 

java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

но SDK HOME на самом деле является сим-ссылкой, по-прежнему указывающей на 1.6

/Library/Java/Home в поисковике GetInfo указывает на /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home

в Терминале

./Home -> /System/Library/Frameworks/JavaVM.framework/Home

Иди разберись.

Я нашел здесь 1.7 и использую его для сборки: /Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home

Дейв
источник
0

Я думаю, что проблема частично связана с механизмом запуска java. Мне удалось заставить Eclipse запускать мой код под Java7, но я думаю, что само eclipse все еще работает под Java6. Кроме того, у меня есть java-программа, которая последний раз была скомпилирована год назад и построена с использованием jarbundler-2.1.0.jar (с опцией jvmversion = "1.6+"). Когда я дважды щелкаю файл .app, он запускает Java6, но когда я дважды щелкаю файл .jar внутри .app, он запускает Java7.

Кроме того, я не использую JAVA_HOME, но все равно получаю правильную версию java "1.7.0_04", указанную в вопросе. JAVA_HOME кажется отвлекающим маневром. Может быть, Maven это нужно, но Eclipse, похоже, его не использует, и запуск файлов jar тоже.

И после установки Java7 в инструменте настроек Java, похоже, это не влияет на запуск java-файлов .app. Однако он позволяет «java -version» из терминала работать нормально. Я попытался снять все флажки, кроме опции Java7, а затем Eclipse вообще не запускался.

dmolony
источник
0

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

Поэтому сначала запустите команду which mvn и проверьте, какой исполняемый файл mvn вы используете. После этого отредактируйте этот файл mvn и измените переменную JAVA_HOME на предпочитаемый вами дом java.

Анкит Бхатнагар
источник