[英]How to set JAVA_HOME from the ubuntu shell on WSL2?
I installed WSL2 on my Windows 10 Home.我在 Windows 10 Home 上安装了 WSL2。 I want to use Maven (which I verified is installed correctly on Windows).
我想使用 Maven (我验证已在 Windows 上正确安装)。
In an ubuntu shell from Windows Terminal, I set JAVA_HOME in my .profile
but it would not get set.在来自 Windows 终端的 ubuntu shell 中,我在我的
.profile
中设置了 JAVA_HOME 但它不会被设置。 I ran these commands to try out the correct way to set JAVA_HOME but they do not work.我运行了这些命令来尝试设置 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
UPDATE:更新:
I followed user Aran's (unfortunately deleted) answer below - I edited /etc/environment and added我在下面关注了用户 Aran(很遗憾被删除)的答案 - 我编辑了 /etc/environment 并添加了
export JAVA_HOME="/mnt/c/Program Files/Java/jdk-11.0.10"
then in .bashrc
I added然后在
.bashrc
我添加了
source /etc/environment
and thought it worked because when I did an env
in the ubuntu shell, I saw JAVA_HOME并认为它有效,因为当我在 ubuntu
env
中做一个环境时,我看到了 JAVA_HOME
I installed mvn and it still gives the same error:我安装了 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
I think it is the space in "Program Files".我认为这是“程序文件”中的空间。 I do have JDK 11 installed.
我确实安装了 JDK 11。 Verified by navigating to JAVA_HOME/bin and I can see javac.exe.
通过导航到 JAVA_HOME/bin 进行验证,我可以看到 javac.exe。
So the issue is not fixed.所以问题没有解决。
UPDATE 2更新 2
Here is what the Maven script tries to do with JAVA_HOME, which may help find the correct workaround:这是 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
Please note that the script goes through the "else" part, and that the ". -x" part is where it fails.请注意,脚本通过“else”部分,而“.-x”部分是它失败的地方。
Note : This is not a duplicate of this question .注意:这不是这个问题的重复。 I do not have access to how Maven is accessing JAVA_HOME.
我无权访问 Maven 如何访问 JAVA_HOME。 The question is not about
cd $JAVA_HOME
.问题不在于
cd $JAVA_HOME
。 It is about using mvn
Maven.这是关于使用
mvn
Maven。 If Maven is using $JAVA_HOME
internally, there is no way I can see how to make it use "$JAVA_HOME"
如果 Maven 在内部使用
$JAVA_HOME
,我无法看到如何使它使用"$JAVA_HOME"
Add copy of java.exe with the name just "java".添加名为“java”的 java.exe 的副本。 That will prevent mvn from complaining - it looks for "$JAVACMD"which is defined as JAVACMD="$JAVA_HOME/bin/java"
这将防止 mvn 抱怨 - 它查找定义为 JAVACMD="$JAVA_HOME/bin/java" 的“$JAVACMD”
I solved it by installing OpenJDK 17 on WSL(link below).我通过在 WSL 上安装 OpenJDK 17 解决了这个问题(下面的链接)。
Run the following commands in WSL (I was using Windows Terminal)在 WSL 中运行以下命令(我使用的是 Windows 终端)
Link: https://techviewleo.com/install-java-openjdk-on-ubuntu-linux/链接: https://techviewleo.com/install-java-openjdk-on-ubuntu-linux/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.