Gradle 发现错误的 JAVA _ HOME,即使它的设置是正确的

当试图运行的梯度,我得到以下错误:

# 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 问题。我也试过重新安装葛拉德尔,但没有任何效果。

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

186208 次浏览

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

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

原来,我从 Ubuntu 13.10存储库 本身中下载的特定 Gradle 二进制文件尝试导出 JAVA _ HOME。感谢 卢卡斯的建议。

/usr/bin/gradle70号线:

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

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

如果你只是下载二进制从他们的 网站它没有这个问题, 这是 Ubuntu 回购版本的一个问题。13.10版本似乎还有其他一些问题。

添加一个符号链接

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

对我来说,这个错误是由于原因 格拉德尔安装为 Sudo和我正在尝试作为默认用户运行 Gradle。

试试:

sudo gradle -version

或者

sudo gradle -v

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

enter image description here

我对这个也有意见。它正确的时候却说错了目录。所以我只是创建了一个名为 JAVA _ HOME 的局部变量,省略了 final/bin/JAVA。我觉得挺好的。

您还可以访问 gradle 安装文件夹中的 bin 文件夹,并更正 gradle.bat 文件中的 JAVA _ HOME 参数。 在我的例子中,我的 JAVA _ HOME 被设置为 c: Program files JAVA bin Bat 中的 JAVA _ HOME 设置为% JAVA _ HOME% bin JAVA.exe。

我在 gradle.bat 中更正了 JAVA _ HOME,它起作用了。

谢谢! ! !

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

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.13的 gradle 文件的第70行找到 export 命令,但是我明白了一个愚蠢的错误,那就是,

如果在 gradle 文件夹/bin/中没有找到第70行的 export 命令,请检查 ~/。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行(如果没有 export 命令)或第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路径中减去它。

我的情况就是这样。

在我的 docker 容器中(找不到 java 的问题最小) ,“ which”没有安装。使用 gradlew 编译一个项目。去找爪哇 安装解决了问题。

尝试安装最新版本的 gradle,

sudo add-apt-repository ppa:cwchien/gradle


sudo apt-get update


sudo apt-get install gradle

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

解决方案是使 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 上面的垃圾桶,所以这样做

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

如果 GRADLE _ HOME 和 JAVA _ HOME 环境设置正确,那么检查 JDK 目录,确保在下面的路径下有 < em > 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.exe)

就像我说的,看起来。Bat-file 尝试从 %JAVA_HOME%/bin/java.exe中找到 java.exe,因为 bin在路径中重复了两次,所以它找不到它。 从 gradle.bat 中删除额外的 /bin

Gradle

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

export JAVA_HOME="path_to_java_home"

其中 path_to_java_home是您的 bin/java所在的文件夹。

如果 java 安装正确,你可以通过以下命令找到它的位置:

readlink -f $(which java)

在将 bin/java放入 JAVA_HOME时,不要忘记从路径的末端删除 bin/java

在我的 Ubuntu 中,这个问题让我头疼了两天。

步骤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

第二步,注意路径: /usr/lib/jvm/java-8-openjdk-amd64/bin/java

排除 bin/java

你的 JAVA _ HOME = /usr/lib/jvm/java-8-openjdk-amd64

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

sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

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

您需要包含完整的 java-jdk 目录,而不仅仅是 java/bin。

例如:

根据你的 jdk 位置改变路径 PATH=$PATH:$JAVA_HOME

使用:

根据你的 jdk 位置改变路径 PATH=$PATH:$JAVA_HOME

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

# 主题: TargetVersion 是 Java 8,但是不存在环境变量的 JAva8 _ HOME

我想这就是你在 IntelliJ 中修复它的方法。当我为一个新项目选择“在新窗口中启动”时,我遇到过几次这样的情况,但我还没有写下步骤。 1. 文件-> 项目结构。项目设置/项目。确保项目 SDK 和项目语言级别正确。 首选项。构建,执行,部署/构建工具/分级。确保分级 JVM 是正确的。 在此之后,您可能必须重新启动 IntelliJ。


现在问题解决了


任务: 准备 KotlinBuildScriptModel UP-TO-DATE

这个版本使用了已经废弃的 Gradle 特性,使得它不能与 Gradle 8.0兼容。

您可以使用“—— police-mode all”来显示单独的弃用警告,并确定它们是否来自您自己的脚本或插件。

参见 https://docs.gradle.org/7.3.3/userguide/command_line_interface.html#sec:command_line_warnings

在22秒内建立成功