首页 文章

Gradle发现错误的JAVA_HOME,即使它已正确设置

提问于
浏览
152

尝试运行gradle时,出现以下错误:

# gradle

ERROR: JAVA_HOME is set to an invalid directory: /usr/lib/jvm/default-java

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation.

但是,当我检查JAVA_HOME变量时,我得到:

# echo $JAVA_HOME 
/usr/lib/jvm/java-7-oracle

我的JAVA_HOME在.bashrc中定义,我已经仔细检查过它是否被设置为源 .

运行 java -version 也确认JAVA_HOME设置正确且位于PATH上 .

# java -version
java version "1.7.0_51"
Java(TM) SE Runtime Environment (build 1.7.0_51-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

我还检查了 /usr/bin/java 符号链接到 /etc/alternatives/java ,这反过来正确符号链接到 /usr/lib/jvm/java-7-oracle/jre/bin/java

另外,我检查了 .bash_profile/etc/profile 中没有重复的JAVA_HOME定义 .

所以我的问题是Gradle如何/为什么找到 /usr/lib/jvm/default-java ,更重要的是我如何将它指向正确的目录?

其他需要JDK工作的程序,所以我认为它是Gradle问题 . 我也尝试重新安装Gradle,没有任何区别 .

我正在运行64位Xubuntu(Ubuntu 13.10基础)

16 回答

  • 4
    sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/default-java
    

    创建指向default-java目录的符号链接 .

    你可以找到你的java目录

    readlink -f $(which java) 
    # outputs: /usr/lib/jvm/java-7-oracle/jre/bin/java
    # Remove the last `/bin/java` and use it in above symbolic link command.
    
  • 2

    我也有这个问题 . 它说错误的目录是正确的 . 所以我刚刚创建了一个名为JAVA_HOME的局部变量,省略了final / bin / java . 它对我来说很好 .

  • 1

    在我的dockercontainer(最小的没有找到java的问题)是,没有安装“哪个” . 使用在./gradlew中找到的gradlew使用gradlew来组合项目java安装解决了这个问题 .

  • 249

    事实证明,我从Ubuntu 13.10存储库本身下载的特定Gradle二进制文件试图导出JAVA_HOME . 感谢Lucas提出建议 .

    /usr/bin/gradle 第70行:

    export JAVA_HOME=/usr/lib/jvm/default-java
    

    注释掉这一行解决了这个问题,Gradle找到了Java二进制文件的正确路径 .

    如果你只是从他们的_2445569下载二进制文件它没有这个问题,这是Ubuntu repo版本的一个问题 . There also seem to be some other issues with 13.10 version.

  • 3

    添加符号链接

    sudo ln -s /usr/lib/jvm/java-7-oracle /usr/lib/jvm/default-java
    
  • 2

    解决方案是让JAVA_HOME == dir在javac所在的bin之上

    type javac
    
    javac is /usr/bin/javac   # now check if its just a symlink
    
    ls -la /usr/bin/javac 
    
    /usr/bin/javac -> /etc/alternatives/javac   # its a symlink so check again
    
    ls -la /etc/alternatives/javac  # now check if its just a symlink
    
    /etc/alternatives/javac -> /usr/lib/jvm/java-8-openjdk-amd64/bin/javac
    

    好的,所以终于在实际的javac上面找到了bin,所以这样做

    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH
    

    以上可以简化并推广到

    which javac >/dev/null 2>&1 || die "ERROR: no 'javac' command could be found in your PATH"
    export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which javac)  )))
    
  • 46

    对我来说这个错误是由于 Gradle 安装为 sudo 而我尝试作为默认用户运行Gradle .

    尝试:

    sudo gradle -version
    

    要么

    sudo gradle -v
    
  • 13

    尝试安装 gradle 的最新版本,

    sudo add-apt-repository ppa:cwchien/gradle
    
    sudo apt-get update
    
    sudo apt-get install gradle
    

    如果我们从ubuntu repo安装,它将安装旧版本,(对我而言,它是gradle 1.4) . 在旧版本中,它将java home从gradle设置为 export JAVA_HOME=/usr/lib/jvm/default-java . 最新版本没有这个问题 .

  • 2

    JAVA_HOME 你的 JAVA_HOME ?如果不导出,该设置将不会传播到该shell内部启动的命令 . 此外, java -version 不使用 JAVA_HOME ,而是使用路径中找到的第一个 java . 确保你的 .bashrc 看起来像这样:

    JAVA_HOME=/path/to/java/home
    export JAVA_HOME
    
  • 0

    我有同样的问题,但我没有在第70行的gradle文件中找到最新版本2.13的导出命令,但我理解那里有一个愚蠢的错误,即关注,

    如果在gradle文件夹/ bin /中没有在gradle文件中找到带有导出命令的第70行,那么检查〜/ .bashrc,如果找到 export JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64/bin/java ,则从此行中删除 /bin/java ,如 JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64 ,并在路径中> >>而不是这个 export PATH=$PATH:$HOME/bin:JAVA_HOME/ ,它将是 export PATH=$PATH:$HOME/bin:JAVA_HOME/bin/java . 然后运行 source ~/.bashrc .

    原因是,如果你检查你的gradle文件,你会在第70行(如果没有导出命令)或第75行找到,

    JAVACMD =“$ JAVA_HOME / bin / java”
    科幻
    如果[! -x“$ JAVACMD”];然后
    死“错误:JAVA_HOME设置为无效目录:$ JAVA_HOME
    这意味着/ bin / java已经存在,因此需要从JAVA_HOME路径中减去它 .

    这发生在我的情况下 .

  • 12

    我在Ubuntu上运行以下命令时遇到了这个问题:

    ionic build android
    

    为了解决这个问题,我做了以下步骤:

    ln -sf /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java /usr/lib/jvm/default-java
    

    将JAVA_HOME添加到/ etc / environment:

    vi /etc/environment
    

    加:

    JAVA_HOME="/usr/lib/jvm/default-java"
    

    保存后,阅读:

    source /etc/environment
    

    最后,您可以运行build命令 .

  • 7

    对我来说,Eclipse中外部工具配置的参数部分的显式设置是问题所在 .

    enter image description here

  • 0

    您还可以转到gradle安装文件夹中的bin文件夹,并更正gradle.bat文件中的JAVA_HOME参数 . 在我的例子中,我的JAVA_HOME设置为c:\ Program files \ java \ bin gradle.bat中的JAVA_HOME设置为%JAVA_HOME%\ bin \ java.exe .

    我纠正了gradle.bat中的JAVA_HOME并且它有效 .

    谢谢!!!

  • 4

    如果您的GRADLE_HOME和JAVA_HOME环境设置正确,请检查您的JDK目录并确保在下面的路径下有 java.exe 文件 .

    C:\Program Files (x86)\Java\jdk1.8.0_181\bin
    

    如gradle.bat文件中提到的错误

    :findJavaFromJavaHome
    set JAVA_HOME=%JAVA_HOME:"=%
    set JAVA_EXE=%JAVA_HOME%/bin/java.exe
    
    if exist "%JAVA_EXE%" goto init
    
    echo.
    echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
    echo.
    echo Please set the JAVA_HOME variable in your environment to match the
    echo location of your Java installation.
    

    它无法找到您的Java安装 . 所以找到并设置

    java.exe

    如果一切正确的话 %JAVA_HOME%/bin

    这适用于我(我的帐户被客户端禁用,他们的管理员已从我的目录中删除了java.exe . )

  • 0

    [Windows]如前所述,看起来.bat -file尝试从 %JAVA_HOME%/bin/java.exe 找到java.exe,因此它找不到它,因为 bin 在路径中重复两次 . 从gradle.bat中删除额外的 /bin .

    Gradle

  • 0

    在运行命令之前,请尝试输入:

    export JAVA_HOME="path_to_java_home"
    

    path_to_java_homebin/java 所在的文件夹 .

    如果正确安装了java,您可以使用以下命令找到它的位置:

    readlink -f $(which java)
    

    不要忘记将 bin/java 从路径末尾移除 JAVA_HOME

相关问题