I installed WSL2 on my Windows 10 Home. I want to use Maven (which I verified is installed correctly on Windows).
In an ubuntu shell from Windows Terminal, I set JAVA_HOME in my .profile
but it would not get set.
I ran these commands to try out the correct way to set JAVA_HOME but they do not work.
user@DESKTOP:/mnt/c/Users/user$ mvn
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
user@DESKTOP:/mnt/c/Users/user$ JAVA_HOME=/mnt/c/Program\ Files/Java/jdk-11.0.10/bin
user@DESKTOP:/mnt/c/Users/user$ cd $JAVA_HOME
-bash: cd: too many arguments
user@DESKTOP:/mnt/c/Users/user$ cd /mnt/c/Program\ Files/Java/jdk-11.0.10/bin
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ mvn --version
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ JAVA_HOME=/mnt/c/'Program\ Files'/Java/jdk-11.0.10/bin
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ cd $JAVA_HOME
-bash: cd: too many arguments
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ JAVA_HOME=/mnt/c/'Program\ Files'/Java/jdk-11.0.10
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ cd $JAVA_HOME
-bash: cd: too many arguments
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ cd /mnt/c/Program\ Files/Java/jdk-11.0.10/bin
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ pwd
/mnt/c/Program Files/Java/jdk-11.0.10/bin
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ echo $JAVA_HOME
/mnt/c/Program\ Files/Java/jdk-11.0.10
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ export JAVA_HOME="/mnt/c/Program Files/Java/jdk-11.0.10"
user@DESKTOP:/mnt/c/Program Files/Java/jdk-11.0.10/bin$ cd $JAVA_HOME
-bash: cd: too many arguments
user@DESKTOP:~$ export JAVA_HOME="/mnt/c/Program\ Files/Java/jdk-11.0.10"
user@DESKTOP:~$ cd $JAVA_HOME
-bash: cd: too many arguments
UPDATE:
I followed user Aran's (unfortunately deleted) answer below - I edited /etc/environment and added
export JAVA_HOME="/mnt/c/Program Files/Java/jdk-11.0.10"
then in .bashrc
I added
source /etc/environment
and thought it worked because when I did an env
in the ubuntu shell, I saw JAVA_HOME
I installed mvn and it still gives the same error:
$ mvn The JAVA_HOME environment variable is not defined correctly This environment variable is needed to run this program NB: JAVA_HOME should point to a JDK not a JRE
I think it is the space in "Program Files". I do have JDK 11 installed. Verified by navigating to JAVA_HOME/bin and I can see javac.exe.
So the issue is not fixed.
UPDATE 2
Here is what the Maven script tries to do with JAVA_HOME, which may help find the correct workaround :
if [ -z "$JAVA_HOME" ] ; then
JAVACMD=`which 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
echo "NB: JAVA_HOME should point to a JDK not a JRE" >&2
exit 1
fi
Please note that the script goes through the "else" part, and that the "! -x" part is where it fails.
Note: This is not a duplicate of this question.
I do not have access to how Maven is accessing JAVA_HOME.
The question is not about cd $JAVA_HOME
. It is about using mvn
Maven. If Maven is using $JAVA_HOME
internally, there is no way I can see how to make it use "$JAVA_HOME"
Workaround: (not an exact solution to the question)
Set the JAVA_HOME variable from Windows, via the gui and use Windows Powershell instead of ubuntu shell.