I cannot run Maven from terminal on MacOS because it says
The JAVA_HOME environment variable is not defined correctly, this environment variable is needed to run this program.
Every Google hit on the problem says not to have a space in your export command ... I only wish it were that simple ... here is some output
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home'
mvn -version
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.
ls $JAVA_HOME
COPYRIGHT THIRDPARTYLICENSEREADME.txt jmc.txt man
LICENSE bin jre release
README.html include legal src.zip
THIRDPARTYLICENSEREADME-JAVAFX.txt javafx-src.zip lib
$JAVA_HOME/bin/java -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
michael on Mikes-MacBook-Pro (c for commands)
mvn
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home'
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-17.0.2.jdk/Contents/Home
export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home'
echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home
I even moved my .bash_profile to another folder and started a new session. I also tried a brew uninstall then a brew install ... with no luck.
Any ideas?
Edit:
Inside the mvn command, which is a script, here is where it is apparently failing:
if [ -z "$JAVA_HOME" ] ; then
JAVACMD="`\\unset -f command; \\command -v java`"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
echo "The JAVA_HOME environment variable is not defined correctly," >&2
echo "this environment variable is needed to run this program." >&2
exit 1
fi
I copied this line
JAVACMD="$JAVA_HOME/bin/java"
and used it ... this was my results ... so no idea why it's failing inside the script - but my knowledge of bash script is very limited.
JAVACMD="$JAVA_HOME/bin/java"
$JAVACMD -version
java version "1.8.0_311"
Java(TM) SE Runtime Environment (build 1.8.0_311-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.311-b11, mixed mode)
I even modified the script to this
echo $JAVACMD
if [ ! -x "$JAVACMD" ] ; then
echo "The JAVA_HOME environment variable is not defined correctly," >&2
echo "this environment variable is needed to run this program." >&2
exit 1
fi
And this is my output
mvn
/Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/java
The JAVA_HOME environment variable is not defined correctly,
this environment variable is needed to run this program.
Next, I took out the negative test in the if then statement so it would pass and now its saying this:
mvn
/usr/local/Cellar/maven/3.8.5/libexec/bin/mvn: line 194: /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/java: No such file or directory
/usr/local/Cellar/maven/3.8.5/libexec/bin/mvn: line 194: exec: /Library/Java/JavaVirtualMachines/jdk-17.0.1.jdk/Contents/Home/bin/java: cannot execute: No such file or directory
Im going to check folder permissions in that Library folder.