【问题标题】:Using Ubuntu's subsystem on Windows for 'make' gives java error在 Windows 上使用 Ubuntu 的子系统进行“make”会产生 java 错误
【发布时间】:2021-02-10 20:56:58
【问题描述】:

我正在尝试执行 Makefile 作为我课程的一部分。它分别是 CUP 和 Jflex 中的解析器和词法分析器。在 Windows Powershell 中是不可能的,所以我被建议使用 Linux,我的同事也能够在 Windows 上的 Ubuntu 子系统上运行它。

于是我下载了ubuntu:

https://www.microsoft.com/en-us/p/ubuntu/9nblggh4msv6?activetab=pivot:overviewtab 来自微软商店

然后允许在 Windows 设置中使用 Linux 子系统,但是现在,当我尝试运行时 make 在 bash 中,我收到此错误:

mkdir -p bin
java -jar lib/jflex-1.8.2.jar -d src/ src/Lexer.lex
make: java: Command not found
make: *** [Makefile:10: bin/SC.class] Error 127

你知道这是为什么吗?我的同事在桌面上做了​​这个,显然是在第一次做 make 之后 当时,bash 询问他是否要安装 JDK 8,并且在 bash 安装之后,它就起作用了。但是现在,当他尝试在他的 Windows 笔记本电脑上执行此操作时,他遇到了和我一样的问题。另请注意,我的机器上安装了 JDK 15

【问题讨论】:

  • WSL 不知道您在 Windows 上安装的任何软件。我认为使用apt install ... 为子系统再次安装它是最简单的。或者,您可以在 WSL 中使用 Windows 的 java.exe,请参阅 superuser.com/q/1216231/652023
  • 这正是我的想法,我的同事试图说服我 WSL 将在我的 Windows 上运行,所以它应该能够看到所有安装的应用程序和程序,包括 JDK,@ 987654323@工作?
  • 喜欢这样安装java8:sudo apt updatesudo apt install openjdk-8-jdk

标签: java linux bash ubuntu java-8


【解决方案1】:

您可以在 WSL 中运行包括 Java 在内的所有 Windows 10 可执行文件,但请注意,GNU/Linux 不会像 Windows 那样默认添加“.EXE”(Windows 使用 PATHEXT=.COM;.EXE;.BAT ... 来实现此目的),而 WSL bash PATH 上不一定有 Windows 二进制文件。

例如我安装的 JDK14 是在 Windows C:\java\jdk-14 == WSL /mnt/c/java/jdk-14:

 /mnt/c/java/jdk-14/bin/java -version
 => Fails with 
 bash: /mnt/c/java/jdk-14/bin/java: No such file or directory
 /mnt/c/java/jdk-14/bin/java.exe -version
 java version "14" 2020-03-17

您可以使用以下一项或多项来修复您的 makefile / 运行问题:

  1. 尝试将您的 WSL bash PATH 设置为包含 Windows JDK,并将您的 makefile 命令编辑为 java.exe 而不是 java

      export PATH=/mnt/c/java/jdk-14/bin:$PATH
      java.exe -version
      => Should work
    
  2. javajava.exe 的替代符号链接 - 假设 PATH 包含 .

      export PATH=.:$PATH
      ln -s /mnt/c/java/jdk-14/bin/java.exe java
      java -version
      => Should work
    
  3. 在 WSL 上安装 Java - @Samuel V. 建议的链接可以使用,但如果您需要特定的 JDK,下载reference Linux release 会更容易。

【讨论】:

    猜你喜欢
    • 2020-06-30
    • 2018-06-12
    • 2021-09-18
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多