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

时间:2014-03-10 17:47:38

标签: java linux gradle environment-variables

尝试运行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基础)

19 个答案:

答案 0 :(得分:252)

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

/usr/bin/gradle第70行:

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

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

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

答案 1 :(得分:46)

添加符号链接

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

答案 2 :(得分:15)

解决方案是让JAVA_HOME == dir位于bin上javac所在的位置

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)  )))

答案 3 :(得分:13)

对我来说,此错误是由于 Gradle 安装为 sudo 的原因,我尝试作为默认用户运行Gradle。

尝试:

sudo gradle -version

sudo gradle -v

答案 4 :(得分:7)

尝试安装最新版本的gradle

sudo add-apt-repository ppa:cwchien/gradle

sudo apt-get update

sudo apt-get install gradle

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

答案 5 :(得分:4)

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

如果在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"
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
     

这意味着/bin/java已经存在,因此需要从JAVA_HOME路径中减去。

发生在我的案子中。

答案 6 :(得分:4)

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

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

答案 7 :(得分:3)

当我在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命令。

答案 8 :(得分:2)

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.

答案 9 :(得分:2)

您也可以转到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并且它有效。

谢谢!!!

答案 10 :(得分:2)

对我来说,Eclipse中外部工具配置的arguments部分的显式设置就是问题。

enter image description here

答案 11 :(得分:1)

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

答案 12 :(得分:1)

我已经在Manjaro Linux上进行了测试。应该也可以在其他Disto上使用。

对于Java env var,您需要包括整个java-jdk目录,而不仅仅是java / bin。

例如,代替:

export JAVA_HOME=/opt/jdk-14.0.2/bin#根据您的jdk位置更改路径 PATH=$PATH:$JAVA_HOME

使用此:

export JAVA_HOME=/opt/jdk-14.0.2/#根据您的jdk位置更改路径 PATH=$PATH:$JAVA_HOME

然后运行gradle命令,它将起作用。

答案 13 :(得分:0)

在我的dockercontainer中(最小的是没有找到java的问题)是,"其中"没安装。使用在./gradlew中使用的gradlew来编译项目来查找java 安装解决了这个问题。

答案 14 :(得分:0)

如果正确设置了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。)

答案 15 :(得分:0)

[Windows]如前所述,.bat -file似乎试图从%JAVA_HOME%/bin/java.exe中查找java.exe,因此找不到它,因为bin在路径中重复了两次。 从gradle.bat中删除多余的/bin

Gradle

答案 16 :(得分:0)

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

def manage_authors(request):
    AuthorFormSet = modelformset_factory(Produkt, fields=('nazwa','ilosc','minimum',),extra=0)
    if request.method == 'POST':
        formset = AuthorFormSet(request.POST or None, request.FILES or None)
        if formset.is_valid():
            formset.save()

    else:
        formset = AuthorFormSet()
    return render(request, 'manage_authors.html', {'formset': formset})    

export JAVA_HOME="path_to_java_home" path_to_java_home所在的文件夹。

如果正确安装了Java,则可以使用以下命令找到其位置:

bin/java

在将readlink -f $(which java) 放入bin/java的过程中,别忘了从路径末尾删除JAVA_HOME

答案 17 :(得分:0)

在我的Ubuntu中,我在此问题上头痛了2天。

步骤1.在终端whereis java上输入 然后它将显示类似这样的内容

java: /usr/bin/java /etc/java /usr/share/java /usr/lib/jvm/java-8-openjdk-amd64/bin/java /usr/share/man/man1/java.1.gz

步骤2。记下路径:  /usr/lib/jvm/java-8-openjdk-amd64/bin/java

排除bin/java

您的JAVA_HOME = /usr/lib/jvm/java-8-openjdk-amd64

答案 18 :(得分:0)

在build.gradle中添加以下行解决了我的问题。

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8