首页 文章

在OSX上运行./gradlew时,JAVA_HOME设置为无效目录

提问于
浏览
8

我尝试从Android项目目录运行 ./gradlew ,但是出现以下错误:

错误:JAVA_HOME设置为无效目录:/Library/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home请在您的环境中设置JAVA_HOME变量以匹配Java安装的位置 .

我尝试过的事情:

  • 导航到 /Library/Java/JavaVirtualMachines . jdk1.8.0_11.jdk 存在,但 jdk1.7.0_79.jdk 也是如此

  • which java 打印出 /usr/bin/java

  • printenv 打印

... JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.8.0_11.jdk / Contents / Home JDK_HOME = / Library / Java / JavaVirtualMachines / jdk1.8.0_11.jdk / Contents / Home ...

  • javac -version 打印 javac 1.8.0_11

  • which javac 打印 /usr/bin/javac

3 回答

  • 17

    检查/ usr / libexec / java_home是否存在 . 如果是,那么尝试运行

    export JAVA_HOME=`/usr/libexec/java_home`
    

    并重新运行你的gradlew构建 . 如果它工作,那么使其永久化

    echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile
    
  • 0

    我已将以下内容添加到我的 .bash_profile 中,以帮助解决此问题 . 这具有额外的好处,能够运行 setjdk {version} 并动态切换java版本 .

    function setjdk() {
      if [ $# -ne 0 ]; then
       removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
       if [ -n "${JAVA_HOME+x}" ]; then
        removeFromPath $JAVA_HOME
       fi
       export JAVA_HOME=`/usr/libexec/java_home -v $@`
       export PATH=$JAVA_HOME/bin:$PATH
      fi
    }
    
    function removeFromPath() {
      export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
    }
    
    #Default JDK to Java 8
    setjdk 1.8
    
  • 1

    编辑android gradle项目的 gradlew.bat 文件

    :findJavaFromJavaHome
    set JAVA_HOME=%JAVA_HOME:"=%
    set JAVA_EXE=%JAVA_HOME%/bin/java.exe
    

    将此更改为

    :findJavaFromJavaHome
    set JAVA_HOME=%JAVA_HOME:"=%
    set JAVA_EXE=C:/Program Files/Java/jdk1.8.0_11/bin/java.exe
    

相关问题