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_profile
文件。因此,当您输入echo $JAVA_HOME
时,它将返回在那里设置的值。
当您直接启动 IntelliJ 时,它不会读取 ~/.bash_profile
... 为什么会这样?所以对于 IntelliJ,这个变量没有设置。
对此有两种可能的解决方案:
从 Bash 会话启动 IntelliJ:打开终端并运行"/Applications/IntelliJ IDEA.app/Contents/MacOS/idea"
。 idea
进程将继承 Bash 的任何已被 export
ed 的环境变量。 (既然你做了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 Idea:导入 Gradle 项目 - 尚未定义 JAVA_HOME
使用IntelliJ IDEA 14和Maven创建java web项目