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)

有人知道发生了什么吗? 谢谢!

175550 次浏览

问题是你的“ SDK 项目”根本不存在!通过单击“ New...”添加“ ProjectSDK”并选择 JDK 的路径。然后就没事了。

有点违反直觉,但是您必须首先为 Java 项目设置 SDK。在 IntelliJ 欢迎屏幕的右下角,选择“ Configure > Project Default > Project Architecture”。

左边的 Project 选项卡将显示您没有选择 SDK:

因此,您必须单击下拉列表右侧的“ New...”按钮,并将其指向 JDK。之后,您可以返回到导入屏幕,并且应该用 JAVA _ HOME 变量填充它,前提是您拥有这个集合。

如果你想让 intellij 认可你的 JAVA _ HOME,你可以这样做:

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

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

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

在我的案例中,我需要一个较低的 JRE,所以我不得不告诉 IntelliJ 在“ Platform Settings”中使用一个不同的 JRE

  • 平台设定 > SDK ( + ;)
  • 单击 +按钮添加新的 SDK (或者重命名并加载现有 SDK)
  • 从适当的 SDK 中选择/content/Home 目录
    (即/Library/Java/JavaVirtualMachines/jdk1.8.0 _ 45. jdk/Content/Home)

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

有人知道发生了什么吗?

这里的问题是,当 $JAVA_HOME 是正确的价值被定义为 在错误的地方时。

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

有两种可能的解决办法:

  • 从 Bash 会话启动 IntelliJ: 打开一个终端并运行 "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea"idea进程将继承任何已被 exported 的 Bash 环境变量。(因为你做了 export JAVA_HOME=…,它工作!)或者说,复杂的方式:
  • 设置应用于所有程序(而不仅仅是 Bash 会话)的全局环境变量。这比你想象的要复杂得多,例如说明了 给你给你。你应该逃跑

    /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

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

enter image description here

选择 Java 主目录

在我的案例中帮助卸载 Android 插件—— Ideas 一直在烦我设置 Android NDK,不让我更改 Java 默认 SDK ——而且因为我不是为 Android 开发的,所以我可以删除它。