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

问题描述 投票:0回答:4

我在 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

更新:

我遵循了用户 Aran(不幸被删除)的答案 - 我编辑了 /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”中的空格。 我确实安装了 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"

java ubuntu windows-subsystem-for-linux wsl-2
4个回答
1
投票

添加 java.exe 的副本,名称仅为“java”。这将防止 mvn 抱怨 - 它会查找“$JAVACMD”,其定义为 JAVACMD="$JAVA_HOME/bin/java"


1
投票

我通过在 WSL 上安装 OpenJDK 17 解决了这个问题(下面的链接)。

在 WSL 中运行以下命令(我使用的是 Windows 终端)

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

链接:https://techviewleo.com/install-java-openjdk-on-ubuntu-linux/


0
投票

由于在 WSL2 中设置 JAVA_HOME 似乎是一场无望的战斗,它可以与 Windows 版本的 Maven 正常工作,因此我最终设置了一些简单的别名,以通过 WSL 中的 PowerShell.exe 使用 mvn。也许有人也会发现它很有用:

  1. 确保您的 Windows 环境变量设置正确 - 开始 -> 为您的帐户编辑环境变量 - 将 JAVA_HOME 设置为基于 Windows 的 JDK。
  2. 通过使用
    mvn --version
  3. 运行 PowerShell 进行验证
  4. 检查您是否已将 Windows PATH 填充到 WSL PATH 中。在 WSL shell 中尝试一下
    PowerShell.exe
  5. 如果工作正常,则只需将别名添加到 ~/.bashrc / ~/.profile 或 ~/.zshrc / ~/.zprofile :
    alias mvn="powershell.exe mvn"

然后您可以在 WSL 中使用

mvn
命令(别名),该命令将使用 PowerShell 来运行带有 Windows JDK 的基于 Windows 的 Maven。如果您不关心幕后到底发生了什么,您应该有运行本机 WSL mvn 的经验:)


-1
投票

解决方法:(不是问题的确切解决方案)

通过 GUI 从 Windows 设置 JAVA_HOME 变量,并使用 Windows Powershell 而不是 ubuntu shell。

© www.soinside.com 2019 - 2024. All rights reserved.