Переменная Intellij JAVA_HOME

Я начал использовать Gradle и Intellij, но у меня возникли проблемы с настройкой Gradle JVM. Когда я запускаю новый проект Gradle, мне не разрешено определять JVM как переменную JAVA_HOME. На следующих снимках экрана показано, что происходит:

new gradle project

Как вы видите, Intellij говорит, что моя переменная JAVA_HOME не определена, однако, если я наберу echo $JAVA_HOME, я могу получить свой каталог Java, в моем случае: /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home

Мой./~bash_profile настроен следующим образом: export JAVA_HOME=$(/usr/libexec/java_home)

Кто-то может понять, что происходит? Спасибо!

Ответ 1

Проблема заключается в том, что ваш "Project SDK" - это ни один! Добавьте "Project SDK", нажав "Создать..." и выберите путь JDK. И тогда все будет хорошо.

Ответ 2

Бит-интуитивно понятный, но сначала вы должны настроить SDK для проектов Java. В правом нижнем углу экрана приветствия IntelliJ выберите "Настроить" > "По умолчанию проекта" > "Структура проекта".

Вкладка "Проект" слева показывает, что вы не выбрали SDK:

Следовательно, вы должны нажать кнопку "Создать..." в правой части выпадающего списка и указать его на ваш JDK. После этого вы можете вернуться на экран импорта, и он должен быть заполнен переменной JAVA_HOME, если у вас есть этот набор.

Ответ 3

Если вы хотите, чтобы ваш JAVA_HOME был распознан intellij, вы можете сделать одно из следующих действий:

  • Запустите свой intellij с терминала/Приложения/IntelliJ IDEA 14.app/Contents/MacOS (это отобразит ваши переменные bash env)
  • Добавьте переменную env login, выполнив: launchctl setenv JAVA_HOME "/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home"

Чтобы ответить на ваш вопрос, вы можете добавить строку launchctll в свой файл ~/.bash_profile

Как ответили другие, вы можете игнорировать JAVA_HOME, настроив SDK в структуре проекта.

Ответ 4

В моем случае мне нужна была более низкая JRE, поэтому мне пришлось сказать IntelliJ использовать другую в "Настройках платформы"

  • Настройки платформы > SDK ( + ;)
  • Нажмите кнопку +, чтобы добавить новый SDK (или переименуйте и загрузите существующий)
  • Выберите каталог /Contents/Home из соответствующего SDK
    (т.е./Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home)

Ответ 5

Пока никто не ответил на реальный вопрос.

Кто-то может понять, что происходит?

Проблема заключается в том, что, хотя значение вашего $JAVA_HOME верное, вы определили его не в том месте.

  • Когда вы открываете терминал и запускаете сеанс Bash, он будет читать файл ~/.bash_profile. Таким образом, при вводе echo $JAVA_HOME он вернет значение, которое было установлено там.
  • Когда вы запускаете IntelliJ напрямую, он не будет читать ~/.bash_profile... почему? Таким образом, для IntelliJ эта переменная не установлена.

Есть два возможных решения:

  • Запустите IntelliJ из сеанса Bash: откройте терминал и запустите "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea". Процесс idea наследует любые переменные среды Bash, которые были export ed. (Так как вы сделали export JAVA_HOME=…, это работает!), Или сложным способом:
  • Установите глобальные переменные среды, которые применяются ко всем программам, а не только Bash сеансам. Это сложнее, чем вы думаете, и объясняется здесь и здесь, например. Что вам нужно сделать, запустите

    /bin/launchctl setenv JAVA_HOME $(/usr/libexec/java_home)
    

    Однако после перезагрузки он получает reset. Чтобы убедиться, что это запускается при каждой загрузке, выполните

    cat << EOF > ~/Library/LaunchAgents/setenv.JAVA_HOME.plist
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
      <plist version="1.0">
      <dict>
        <key>Label</key>
        <string>setenv.JAVA_HOME</string>
        <key>ProgramArguments</key>
        <array>
          <string>/bin/launchctl</string>
          <string>setenv</string>
          <string>JAVA_HOME</string>
          <string>$(/usr/libexec/java_home)</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
        <key>ServiceIPC</key>
        <false/>
      </dict>
    </plist>
    EOF
    

    Обратите внимание, что это также влияет на процесс терминала, поэтому нет необходимости вставлять что-либо в ваш ~/.bash_profile.