简体   繁体   English

如何在 WSL2 上从 ubuntu shell 设置 JAVA_HOME?

[英]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"

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. Set the JAVA_HOME variable from Windows, via the gui and use Windows Powershell instead of ubuntu shell.

爪哇之家

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 终端)

  1. sudo apt update sudo apt 更新
  2. sudo apt install openjdk-17-jdk sudo apt install openjdk-17-jdk
  3. java --version java --版本

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM