我尝试让WSL识别我的Windows安装环境变量JAVA_HOME。我附加了我的bashrc和Windows环境变量中的内容沿着cmd和bash的输出。x1c 0d1x
在我的bashrc的结尾是什么:
export JAVA_HOME="/mnt/d/Program Files/Java/jdk-11.0.1"
export PATH="/mnt/d/Program Files/Java/jdk-11.0.1/bin:$PATH"
CMD输入/输出:
C:\Users\jaall>javac --version
javac 11.0.1
冲洗输入/输出:
myubuntu_name@DESKTOP-LUK3BII:~$ javac --version
Command 'javac' not found, but can be installed with:
sudo apt install default-jdk
sudo apt install openjdk-11-jdk-headless
sudo apt install ecj
sudo apt install openjdk-8-jdk-headless
我已经在这个问题上停留了一段时间,不能弄清楚它或找到一个工作的解决方案在线。谢谢!
4条答案
按热度按时间uurity8g1#
正如Biswapriyo建议的那样,您应该使用WSLENV。
1.打开PowerShell,然后将
JAVA_HOME
设置为java安装路径。1.在您的情况下,请运行
setx JAVA_HOME "D:\Program Files\Java\jdk-11.0.1"
您应该会看到一条消息,内容为“SUCCESS:指定的值已保存””。
1.然后运行
setx WSLENV "$env:JAVA_HOME/p"
。您应该会再次看到成功消息。
1.在WSL bash提示符中键入“env”。
此时您应该看到
JAVA_HOME
设置正确。注意:如果步骤2不起作用,您可能需要将路径更改为
JAVA_HOME
以包含\bin
文件夹。bis0qfac2#
**TL;DR:**在WSL中,必须使用
javac.exe
,因为它是Windows二进制文件。简单地键入javac
将不起作用,即使路径设置正确。如果不起作用,请尝试将../bin
添加到JAVA_HOME
变量的末尾。在WSL中使用Windows二进制文件和环境变量
有一种更简单的方法可以让Windows和WSL使用相同的JavaSDK二进制文件,你只需要先设置一些东西。最好的是,如果你在Windows上安装了JavaSDK,你不需要安装Linux二进制文件。
检查WSL权限和目录链接(可选,但建议使用)
如果
root
拥有任何驱动器,请在/mnt/c/Users/<UserName>
中执行WSL开发工作我个人在Windows中创建了一个开发目录,并在WSL中添加了一个指向该目录的符号链接:
cd dev
现在将您带到开发目录。确保Java for Windows工作正常
从任意目录打开
PowerShell
/cmd.exe
并输入:java --version
您应该获得JRE信息列表:
您的版本可能不同,重要的是系统知道在哪里可以找到Java。如果出现错误,请确保Windows环境变量设置正确:
在WSL中设置变量
放置下一行代码的最佳位置是
.bashrc
文件,但如果设置了./bash_profile
或/etc/profile
结构,则可以将其放在那里。既然说到这里,让我们再加上Maven:
我有我的WSL,Java,和我的所有其他开发工具设置在我的第二个硬盘,这不是一个系统驱动器,确保您的位置匹配您的JAVA_HOME路径在Windows中。
例如,如果在Windows中,Java位于:
C:\Java\jdk8.0
对应的WSL装载点为:/mnt/c/Java/jdk8.0
执行中
**重要提示:**在WSL中使用
java.exe <args>
而不是java <args>
假设您刚刚编写了CompareTwoStrings.class
,并希望使用Windows二进制文件编译和运行它,您可以从Windows shell或WSL中执行此操作。Windows PowerShell/命令:
工作地点:
在WSL中使用
java <args>
将导致Command 'java' not found
错误。这是因为从WSL中运行Windows二进制文件要求在命令中使用.exe
扩展名。简单
我们不想再安装一个WSL专用的Java副本,浪费宝贵的磁盘空间,所以我们将从WSL shell调用Windows二进制文件。这是WSL-WSL 1的一个特别大的好处,因为它可以(几乎)完美地与Windows文件系统交互。
**注意:**要运行程序,它必须是
Path
变量,或者从包含它的文件夹中运行。希望这对你来说和对我一样容易。只要记住根据你运行的操作系统二进制文件使用正确的命令。这花了我大约10分钟的时间来设置,对于交叉编译和一般的易用性来说是一个救星。
uurity8g3#
我最初让Maven在Windows中工作,试图在WSL2中运行Maven,并尝试了所有以前的解决方案,但无论我为JAVA_HOME和PATH设置什么,都会得到以下结果:
问题是我试图在WSL2 Linux内核中使用Windows版本的JDK。为了解决这个问题,我最终不得不在WSL中安装Linux版本的JDK(版本11),如下所示:
然后获取JDK的路径,并使用它来创建JAVA_HOME,并通过在.profile中附加以下内容来更新PATH
现在关闭并重新打开WSL2,当您再次尝试时:
q8l4jmvw4#
由于我从来没有能够在两个系统之间轻松地共享变量,我创建了一个简单的bash函数,它可以轻松地检索(和定义,如果要求)任何Windows环境变量。它还照顾路径,使他们从Win32转换为Un* x一样。
我将以下内容添加到
/etc/bash.bashrc
:而要显示一个,我所要做的就是调用
winenv PROGRAMFILES
(例如)或者,如果希望导出它,只需在变量名之前添加一个-d参数,如
winenv -d WINDIR
中所示。