2015-06-21 172 views
51

我开始使用Gradle和Intellij,但我有问题来配置Gradle的JVM。 当我启动一个新的Gradle项目时,我不允许将JVM定义为我的JAVA_HOME变量。下面的屏幕截图显示发生了什么:Intellij 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)

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

+0

您是否将Java配置为IntelliJ中的SDK之一?如果你这样做,你不明确要求设置JAVA_HOME。 – Makoto

回答

38

问题是你的“Project SDK”没有!点击“新建...”添加一个“项目SDK”,然后选择JDK的路径。然后它应该是确定的。

+0

谢谢。似乎无法找到关于此的任何文档。 – honyovk

+0

@honyovk是的,它真的很奇怪,我花了大约一个小时试图做到这一点,因为我的JAVA_HOME设置正确,我删除了旧版本......再次感谢Harry.Chen –

+0

实际上这真的很奇怪。我按照你的步骤,点击下一个按钮,并在点击取消按钮的'GroupId,ArtifactId和Version'屏幕上。回到第一个IDE屏幕,我点击打开,并正确配置了Gradle JVM。 –

86

位反直观,但您必须先为Java项目设置SDK。在IntelliJ欢迎屏幕的右下角,选择'配置>项目默认值>项目结构'。

左侧的项目选项卡将显示你没有选择SDK:

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

+1

回复:在IntelliJ欢迎屏幕的右下角 - 我可以进入“欢迎屏幕”吗?从一个项目的中间? – RichMeister

+0

@RichMeister“项目结构”也在'File'菜单中,其快捷方式为'⌘-;' –

+0

希望有些IntelliJ开发人员正在观看此主题并提供一些体面的错误消息,以避免为这种模糊的设置拉扯头发? – Sid

7

如果你想有你的JAVA_HOME通过的IntelliJ的认可,您可以执行下列操作之一:

  • 开始从终端/应用/ IntelliJ IDEA的14.app/Contents/MacOS您的IntelliJ(这将挑选你的bash ENV变量)
  • 添加登录环境变量通过执行: launchctl setenv JAVA_HOME "/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home"

直接回答你的问题,你可以在你的〜/ .bash_profile中

添加launchctl线

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

5

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

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

谢谢,解决了这个问题。 – Suresh

+0

这也为我解决了这个问题,谢谢 – chinabuffet

2

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

有人可以弄清楚发生了什么?

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

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

有这两个可能的解决方案:

  • 启动的IntelliJ从bash命令:打开一个终端,运行"/Applications/IntelliJ IDEA.app/Contents/MacOS/idea"。进程将继承Bash的任何环境变量,这些变量的编号为export。 (因为你做了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

+0

请注意,除了从命令行启动外,此方法与迄今为止提到的所有方法一样,在Java升级时不会动态更新。在创建文件时,$(/ usr/libexec/java_home)位仅计算一次。 –