如何在 WSL2 上从 ubuntu shell 设置 JAVA_HOME?
How to set JAVA_HOME from the ubuntu shell on WSL2?
我在 Windows 10 主页上安装了 WSL2。我想使用 Maven(我已验证已在 Windows 上正确安装)。
在 Windows 终端的 ubuntu shell 中,我在我的 .profile
中设置了 JAVA_HOME 但它不会被设置。
我 运行 这些命令来尝试设置 JAVA_HOME 的正确方法,但它们不起作用。
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
更新:
我关注了用户 A运行 的(不幸删除)下面的回答 - 我编辑了 /etc/environment 并添加了
export JAVA_HOME="/mnt/c/Program Files/Java/jdk-11.0.10"
然后在 .bashrc
我添加了
source /etc/environment
并认为它有效,因为当我在 ubuntu shell 中执行 env
时,我看到 JAVA_HOME
我安装了 mvn,它仍然给出同样的错误:
$ 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
我认为是“Program Files”中的space。
我确实安装了 JDK 11。通过导航到 JAVA_HOME/bin 进行验证,我可以看到 javac.exe.
所以问题没有解决
更新 2
这是 Maven 脚本尝试使用 JAVA_HOME 执行的操作,这可能有助于找到正确的解决方法:
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
请注意脚本通过了“else”部分,而“!-x”部分失败了。
注意:这不是此 的副本。
我无权访问 Maven 如何访问 JAVA_HOME。
问题不在于 cd $JAVA_HOME
。它是关于使用 mvn
Maven 的。如果 Maven 在内部使用 $JAVA_HOME
,我无法看到如何使用 "$JAVA_HOME"
解决方法:(不是问题的精确解)
通过 gui 从 Windows 设置 JAVA_HOME 变量并使用 Windows Powershell 而不是 ubuntu shell。
添加 java.exe 的副本,名称仅为“java”。这将防止 mvn 抱怨 - 它寻找定义为 JAVACMD="$JAVA_HOME/bin/java"
的“$JAVACMD”
我在 Windows 10 主页上安装了 WSL2。我想使用 Maven(我已验证已在 Windows 上正确安装)。
在 Windows 终端的 ubuntu shell 中,我在我的 .profile
中设置了 JAVA_HOME 但它不会被设置。
我 运行 这些命令来尝试设置 JAVA_HOME 的正确方法,但它们不起作用。
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
更新:
我关注了用户 A运行 的(不幸删除)下面的回答 - 我编辑了 /etc/environment 并添加了
export JAVA_HOME="/mnt/c/Program Files/Java/jdk-11.0.10"
然后在 .bashrc
我添加了
source /etc/environment
并认为它有效,因为当我在 ubuntu shell 中执行 env
时,我看到 JAVA_HOME
我安装了 mvn,它仍然给出同样的错误:
$ 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
我认为是“Program Files”中的space。 我确实安装了 JDK 11。通过导航到 JAVA_HOME/bin 进行验证,我可以看到 javac.exe.
所以问题没有解决
更新 2
这是 Maven 脚本尝试使用 JAVA_HOME 执行的操作,这可能有助于找到正确的解决方法:
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
请注意脚本通过了“else”部分,而“!-x”部分失败了。
注意:这不是此 cd $JAVA_HOME
。它是关于使用 mvn
Maven 的。如果 Maven 在内部使用 $JAVA_HOME
,我无法看到如何使用 "$JAVA_HOME"
解决方法:(不是问题的精确解)
通过 gui 从 Windows 设置 JAVA_HOME 变量并使用 Windows Powershell 而不是 ubuntu shell。
添加 java.exe 的副本,名称仅为“java”。这将防止 mvn 抱怨 - 它寻找定义为 JAVACMD="$JAVA_HOME/bin/java"
的“$JAVACMD”