即使设置正确,Gradle也会find错误的JAVA_HOME

当试图运行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_HOMEvariables时,我得到:

 # 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定义。

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

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

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

事实certificate,从Ubuntu 13.10存储库本身下载的特定的Gradle二进制文件尝试导出JAVA_HOME。 感谢卢卡斯提出这个build议。

/usr/bin/gradle第70行:

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

评论这条线解决了这个问题,Gradlefind了Java二进制文件的正确path。

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

添加一个符号链接

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

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

尝试:

 sudo gradle -version 

要么

 sudo gradle -v 

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

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

我有同样的问题,但我没有find最新版本2.13 gradle文件中的70行输出命令,但我明白了一个愚蠢的错误,那就是,

如果在你的gradle文件夹/ bin /中没有find第70行的gradle文件中的export命令,那么检查你的〜/ .bashrc,如果你findexport JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64/bin/java ,然后从这行删除/bin/java ,比如JAVA_HOME==/usr/lib/jvm/java-7-openjdk-amd64 ,并且在path>>>而不是这个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_HOMEpath中减去。

这发生在我的情况。

对于我来说,在Eclipse中的外部工具configuration的参数部分显式设置是问题。

在这里输入图像说明

您也可以转到您的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,它的工作。

谢谢!!!

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

创build一个到default-java目录的符号链接。

你可以通过find你的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. 

解决方法是使javac所在的bin中的JAVA_HOME == dir

 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 

好吧,所以终于find真正的javac上面的垃圾箱所以这样做

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

我也有这个问题。 它说错了目录,当它是正确的。 所以我刚创build了一个名为JAVA_HOME的局部variables,省略了最后的/ bin / java。 它为我工作得很好。

在我的dockercontainer(最小的问题是找不到java)的时候,那个“哪个”没有安装。 使用gradlew编译项目,在./gradlew中findjava安装解决了这个问题。

尝试安装最新版本的gradle

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

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