Intellij JAVA_HOME 变量

问题描述 投票:0回答:8

我开始使用 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)

有人能弄清楚发生了什么吗? 谢谢!

java intellij-idea
8个回答
101
投票

有点违反直觉,但您必须首先为 Java 项目设置 SDK。在 IntelliJ 欢迎屏幕的右下角,选择“配置 > 项目默认值 > 项目结构”。

左侧的“项目”选项卡将显示您没有选择 SDK:

因此,您必须单击下拉列表右侧的“新建...”按钮并将其指向您的 JDK。之后,您可以返回到导入屏幕,并且它应该填充您的 JAVA_HOME 变量(前提是您已经设置了此设置)。


65
投票

问题是你的“Project SDK”没有!点击“New ...”添加一个“Project SDK”,并选择JDK的路径。然后应该就OK了。


25
投票

到目前为止,还没有人回答实际问题。

有人能弄清楚发生了什么吗?

这里的问题是,虽然您的$JAVA_HOME

是正确的,但您将其定义在错误的位置

  • 当您打开终端并启动 Bash 会话时,它将读取
    ~/.bash_profile
    文件。因此,当您输入
    echo $JAVA_HOME
    时,它将返回在那里设置的值。
  • 当您直接启动 IntelliJ 时,它会 not 读取
    ~/.bash_profile
    …为什么要这样呢?所以对于IntelliJ来说,这个变量没有设置。

对此有两种可能的解决方案:

  • 从 Bash 会话启动 IntelliJ:打开终端并运行
    "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea"
    idea
    进程将继承任何已被
    export
    编辑的Bash环境变量。 (既然你做了
    export JAVA_HOME=…
    ,它就有效了!),或者,更复杂的方法:
  • 设置适用于所有程序的全局环境变量,而不仅仅是 Bash 会话。这比您想象的要复杂,例如在herehere进行了解释。你应该做的就是跑步

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

    但是,重启后此设置会重置。为了确保每次启动时都运行,请执行

    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
    中添加任何内容。


11
投票

如果您想让 intellij 识别您的 JAVA_HOME,您可以执行以下操作之一:

  • 从终端 /Applications/IntelliJ IDEA 14.app/Contents/MacOS 启动你的 intellij (这将选择你的 bash 环境变量)
  • 通过执行以下命令添加登录环境变量:
    launchctl setenv JAVA_HOME "/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home"

要直接回答您的问题,您可以在 ~/.bash_profile 中添加 launchctl 行

正如其他人回答的那样,您可以通过在项目结构中设置 SDK 来忽略 JAVA_HOME。


7
投票

就我而言,我需要一个较低的 JRE,因此我必须告诉 IntelliJ 在“平台设置”中使用不同的 JRE

  • 平台设置 > SDK ( +; )
  • 单击 + 按钮添加新的 SDK(或重命名并加载现有 SDK)
  • 从相应的 SDK 中选择 /Contents/Home 目录
    (即/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home)

2
投票

右键单击项目 -> 打开模块设置 -> 单击 SDK

选择 Java 主目录


1
投票

就我而言,帮助卸载了 Android 插件 - Idea 一直困扰我设置 Android NDK 并且不让我更改 Java 默认 SDK - 而且由于我不为 Android 开发,所以我可以将其删除。


0
投票

我也遇到了这个问题,在使用 sdkman 设置 jdk 和 maven 并从工具箱应用程序安装 idea 进行全新的 Linux mint 21.3 安装后。在我的操作系统终端和idea的终端窗口上一切正常,但是使用git工具窗口提交在我的项目上返回问题(日志说找不到JAVA_HOME)。找到此页面https://ntsim.uk/posts/running-git-hooks-with-environment-variables-in-intellij并进行测试后,我的问题得到了解决。总而言之,我做到了

将其添加到 ~/.profile 文件中:

export JAVA_HOME="$HOME/.sdkman/candidates/java/current"

之后我重新启动并检查它是否有效。确实如此! 祝你有美好的一天

© www.soinside.com 2019 - 2024. All rights reserved.