Gradle发现了错误的JAVA#u主页,即使它是';设置正确吗

Gradle发现了错误的JAVA#u主页,即使它是';设置正确吗,java,linux,gradle,environment-variables,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_HO

尝试运行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_主页是在.bashrc中定义的,我仔细检查了它是否被设置为源代码

运行
java-version
还可以确认java\u HOME设置正确,并且在路径上

# 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/alternations/java
的符号链接,这些符号链接正确地指向
/usr/lib/jvm/java-7-oracle/jre/bin/java

此外,我还检查了
.bash\u profile
/etc/profile
中没有重复的JAVA\u HOME定义

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

其他需要JDK的程序运行良好,因此我认为这是一个渐变问题。我也尝试过重新安装Gradle,但没有什么不同


我正在运行64位的Xubuntu(Ubuntu13.10Base)

您是否
导出了
您的
JAVA\u主页
?如果没有导出,设置将不会传播到该shell内部启动的命令。另外,
java-version
不使用
java\u HOME
,而是使用路径中找到的第一个
java
。确保您的
.bashrc
如下所示:

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

事实证明,我从Ubuntu13.10存储库下载的特定Gradle二进制文件本身试图将JAVA_导出到主页。谢谢你的建议

/usr/bin/gradle
第70行:

export JAVA_HOME=/usr/lib/jvm/default-java
注释这一行解决了问题,Gradle找到了Java二进制文件的正确路径

如果你只是从他们的网站上下载二进制文件,它就不会有这个问题, 这是Ubuntu repo版本的一个问题

添加符号链接

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

对我来说,这个错误是由于Gradle安装为sudo的原因造成的,我正试图作为默认用户运行Gradle

尝试:


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


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

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

我在gradle.bat中更正了JAVA_主页,它成功了


谢谢你

我在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
加:

保存后,请阅读:

source /etc/environment
最后,您可以运行build命令

sudo ln -s /usr/lib/jvm/java-7-oracle/jre /usr/lib/jvm/default-java
创建指向默认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/中的gradle文件中找不到带有export命令的第70行,请检查~/.bashrc,如果找到
export JAVA_HOME==/usr/lib/jvm/JAVA-7-openjdk-amd64/bin/JAVA
,然后从此行中删除
/bin/JAVA
,如
JAVA_HOME=/usr/lib/jvm/JAVA-7-openjd64
,它在路径>>>中,而不是这个
导出路径=$path:$HOME/bin:JAVA\u HOME/
,它将是
导出路径=$path:$HOME/bin:JAVA\u HOME/bin/JAVA
。然后运行
source~/.bashrc

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

这意味着
/bin/java
已经存在,因此需要从
java\u HOME
路径中减去它

在我的dockercontainer中(没有找到java的问题很小),没有安装“which”。使用gradlew链接项目,在./gradlew中使用它来查找java
安装解决了问题。

尝试安装最新版本的
gradle

sudo add-apt-repository ppa:cwchien/gradle

sudo apt-get update

sudo apt-get install gradle

如果我们从ubunturepo安装,它将安装旧版本(对我来说是gradle1.4)。在旧版本中,它将gradle中的java home设置为导出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上面找到了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)  )))

如果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\u HOME%/bin
下,如果一切正常


这对我来说是可行的(我的帐户被客户端禁用,他们的管理员从我的目录中删除了java.exe)。

[Windows]如前所述,它看起来像.bat-文件试图从
%java\u HOME%/bin/java.exe
中查找java.exe,所以它找不到它,因为
bin
在路径中重复了两次。 从gradle.bat中删除额外的
/bin


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

export JAVA_HOME="path_to_java_home"
其中
path\u to\u java\u home
是您的
bin/java
所在的文件夹

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

readlink -f $(which java)

在我的Ubuntu中,当把它放到
java\u HOME

中时,不要忘了从路径的末尾删除
bin/java
,我为此头疼了两天

C:\Program Files (x86)\Java\jdk1.8.0_181\bin
: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.
export JAVA_HOME="path_to_java_home"
readlink -f $(which 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
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8