JAVA_HOME is set to an invalid directory at run time. / gradlew on OSX

I tried to run ./gradlew from the Android projects directory, but I get an error:

ERROR: JAVA_HOME is installed in an invalid directory: / Library / Java / JavaVirtualMachines / jdk 1.8.0_11.jdk / Contents / Home

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

Things I tried:

  • Move to /Library/Java/JavaVirtualMachines . jdk1.8.0_11.jdk exists, but also jdk1.7.0_79.jdk

  • which java prints /usr/bin/java

  • printenv prints

...

JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.8.0_11.jdk / Contents / Home JDK_HOME = / Library / Java / JavaVirtualMachines / jdk1.8.0_11.jdk / Contents / Home

...

  1. javac -version prints javac 1.8.0_11

  2. which javac prints /usr/bin/javac

+5
source share
3 answers

Check if / usr / libexec / java _home exists. If this happens, try running

 export JAVA_HOME=`/usr/libexec/java_home` 

and try to build gradlew again. If it works, make it permanent with

 echo export "JAVA_HOME=\$(/usr/libexec/java_home)" >> ~/.bash_profile 
+13
source

I added the following to .bash_profile to help solve problems like this. This has the added benefit of being able to run setjdk {version} and switch Java versions on the fly.

 function setjdk() { if [ $# -ne 0 ]; then removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin' if [ -n "${JAVA_HOME+x}" ]; then removeFromPath $JAVA_HOME fi export JAVA_HOME=`/usr/libexec/java_home -v $@ ` export PATH=$JAVA_HOME/bin:$PATH fi } function removeFromPath() { export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;") } #Default JDK to Java 8 setjdk 1.8 
+1
source

Change the gradlew.bat file of your android gradle project

 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe 

Change it to

 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=C:/Program Files/Java/jdk1.8.0_11/bin/java.exe 
0
source

Source: https://habr.com/ru/post/1238461/


All Articles