Intellij JAVA_HOME 变量

Posted

技术标签:

【中文标题】Intellij JAVA_HOME 变量【英文标题】:Intellij JAVA_HOME variable 【发布时间】:2015-09-06 17:35:33 【问题描述】:

我开始使用 Gradle 和 Intellij,但在配置 Gradle 的 JVM 时遇到问题。 当我开始一个新的 Gradle 项目时,我不允许将 JVM 定义为我的 JAVA_HOME 变量。以下屏幕截图显示了正在发生的事情:

如您所见,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)

有人能猜出发生了什么吗? 谢谢!

【问题讨论】:

您是否在 IntelliJ 中将 Java 配置为您的 SDK 之一?如果你这样做,你没有明确要求设置 JAVA_HOME。 【参考方案1】:

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

【讨论】:

谢谢。似乎找不到任何关于此的文档。 @honyovk 是的,这真的很奇怪,我花了大约一个小时来尝试这样做,因为我的 JAVA_HOME 设置正确并且我删除了旧版本...再次感谢 Harry.Chen 这其实很奇怪。我按照您的步骤,单击了下一步按钮,然后在GroupId, ArtifactId and Version 屏幕上单击了取消按钮。返回到第一个 IDE 屏幕,我单击打开,Gradle JVM 已正确配置。【参考方案2】:

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

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

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

【讨论】:

Re: 在 IntelliJ 欢迎屏幕的右下方 - 我可以进入“欢迎屏幕”吗?从项目中间开始? @RichMeister“项目结构”也在File菜单中,快捷方式为⌘-; 希望一些 IntelliJ 开发人员正在关注这个线程并提供一些体面的错误消息,以避免为这个晦涩的设置拉扯头发?【参考方案3】:

如果您想让 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。

【讨论】:

【参考方案4】:

在我的情况下,我需要一个较低的 JRE,所以我不得不告诉 IntelliJ 在“平台设置”中使用不同的 JRE

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

【讨论】:

【参考方案5】:

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

有人能猜出发生了什么吗?

这里的问题是,虽然你的$JAVA_HOME is correct 的,你定义它在错误的地方

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

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

从 Bash 会话启动 IntelliJ:打开终端并运行 "/Applications/IntelliJ IDEA.app/Contents/MacOS/idea"idea 进程将继承 Bash 的任何已被 exported 的环境变量。 (既然你做了export JAVA_HOME=…,它就可以了!),或者,复杂的方式:

设置适用于所有程序的全局环境变量,而不仅仅是 Bash 会话。这比您想象的要复杂,例如在here 和here 中进行了解释。你应该做的是运行

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

【讨论】:

请注意,此方法与目前提到的所有方法一样,除了从命令行启动之外,在 Java 升级时不会动态更新。 $(/usr/libexec/java_home) 位仅在文件创建时计算一次。【参考方案6】:

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

选择 Java 主目录

【讨论】:

【参考方案7】:

在我的情况下,我帮助卸载了 android 插件 - Idea 一直让我设置 Android NDK 并且不允许我更改 Java 默认 SDK - 由于我不是为 Android 开发的,因此我可以将其删除。

【讨论】:

以上是关于Intellij JAVA_HOME 变量的主要内容,如果未能解决你的问题,请参考以下文章

为intelliJ设置JAVA_HOME?

Intellij Idea:导入 Gradle 项目 - 尚未定义 JAVA_HOME

IntelliJ IDEA JDK及Tomcat的配置

使用IntelliJ IDEA 14和Maven创建java web项目

使用IntelliJ IDEA 16和Maven创建java web项目

使用IntelliJ IDEA 14和Maven创建java web项目