WSL2 上的 Maven 看不到 JAVA_HOME

Posted

技术标签:

【中文标题】WSL2 上的 Maven 看不到 JAVA_HOME【英文标题】:Maven on WSL2 can't see JAVA_HOME 【发布时间】:2021-10-01 08:12:45 【问题描述】:

我的 Windows 10 机器上安装了 JDK 11 和 Maven 3.8.1。注意安装路径没有空格。

按照here 的建议使JAVA_HOME 的值在Ubuntu shell 中可见。然后我重新启动了 Ubuntu shell。

以下是 Windows 终端上 Ubuntu shell 内部的输出:

user@computer:/path$ java -version
openjdk version "11.0.10" 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)

user@computer:/path$ env | grep JAVA
JAVA_HOME=/mnt/c/AdoptOpenJDK/jdk-11-hotspot

user@computer:/path$ mvn -v
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

因此,尽管 JAVA_HOME 的值在 Ubuntu shell 中可见,但不知何故 mvn 看不到它。我该如何解决这个问题?

cmd 运行的 Maven 会给出以下输出:

C:\path>mvn -v
Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d)
Maven home: C:\Maven\bin\..
Java version: 11.0.10, vendor: AdoptOpenJDK, runtime: C:\AdoptOpenJDK\jdk-11-hotspot
Default locale: en_IN, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

版本:

Windows 10 版本 2004(操作系统内部版本 19041.1110) Java 11.0.10 Maven 3.8.1 WSL2 Ubuntu 20.04.2 LTS(通过 WSL2)

【问题讨论】:

只是一个模糊的想法,但你的 pom 中有 <fork>true</fork> 吗?如果是这样,请尝试使用 false 看看会发生什么 没有pom,没有项目。我只是想看看 Maven 能在 WSL2 中正确运行。 那就是那个理论了 ;) 你确定你在每个操作系统中运行的 same Maven 是否相同吗? 您可能无法使用 Windows JDK 在 WSL(在 bash 中)下运行 maven。你可以试试 Linux JDK。 我正在尝试使用 Quarkus,这涉及使用 Docker,这涉及从 WSL2 文件系统内部运行代码。我不应该也从 WSL2 内部运行 Maven 吗? 【参考方案1】:

我不反对您在 WSL 中使用 Linux 版本的 Java 和 Maven 的解决方案,但我认为我明白为什么您在原始问题中的示例失败了。

问题似乎是您使用的是 Windows 版本的 Java/Maven,但 WSL 内部的 JAVA_HOME 使用的是路径的“Linux 形式” (/mnt/c/AdoptOpenJDK/jdk-11-hotspot)。

Maven 抱怨,因为它在 Windows 下运行,它不理解该路径。它需要看到C:\AdoptOpenJDK\jdk-11-hotspot

我相信这是因为您链接到的答案说使用setx WSLENV "JAVA_HOME/p"/p 正在强制从 Windows 路径转换到 WSL/Linux 映射,在这种情况下您想要这样做。

此外,请务必重新启动您启动 WSL 的终端,以便它可以获取新的环境变量。

【讨论】:

【参考方案2】:

我放弃了,只是使用 SDKMAN 在 WSL2 中安装了 JDK 11 和 Maven 3.8.1。

不是一个理想的解决方案,但不想在这个问题上花费更多时间。

【讨论】:

以上是关于WSL2 上的 Maven 看不到 JAVA_HOME的主要内容,如果未能解决你的问题,请参考以下文章

WSLUbuntu16.04 WSL2安装docker

WSLUbuntu16.04 WSL2安装docker

wsl2上的docker非常慢

WSL2 上的设备内存分配失败

为啥带有 SourceTree 的 WSL2 上的 Git 对我来说这么慢?

在 WSL2 Ubuntu 中使用 Laravel 运行 Python 会导致“找不到模块”