【发布时间】:2020-11-29 00:35:32
【问题描述】:
我正在尝试在 Mac OS Catalina (10.15.7) 的命令行中运行 Java。在 Ubuntu 18.04.5 下一切正常,但在 Mac OS 下失败。以下是规格:
Mac OS Catalina (10.15.7):
$java --version
java 14 2020-03-17
Java(TM) SE Runtime Environment (build 14+36-1461)
Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
Ubuntu 18.04.5:
$java --version
openjdk version "14.0.2" 2020-07-14
OpenJDK Runtime Environment (build 14.0.2+12-46)
OpenJDK 64-Bit Server VM (build 14.0.2+12-46, mixed mode, sharing)
我在 Ubuntu 下使用的 Java 只是 OpenJDK Java 14,而我在 Mac 下使用的 Java 似乎是 macOS 附带的任何 Java 14 风格。如果我尝试从 Ubuntu 18 的命令行运行标准的 HelloWorld.java,一切正常:
public class HelloWorld {
public static void main (String [] args) {
System.out.println("Hello, World!");
}
}
编译:
$javac ./HelloWorld.java
运行:
$java HelloWorld
Hello, World!
使用-cp 明确指定CLASSPATH 也可以:
$java -cp /home/anton/Desktop HelloWorld
Hello, World!
然而,以上在 Mac OS 的命令行上完全失败:
$java HelloWorld
Error: Could not find or load main class HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
$java -cp /Users/anton/Desktop HelloWorld
Error: Could not find or load main class HelloWorld
Caused by: java.lang.ClassNotFoundException: HelloWorld
据我所知,在 Mac OS 上解决此问题的唯一方法是将 HelloWorld.class 文件复制到 /Library/Java/Extensions 文件夹。 然后,一切都按预期工作,只要 CLASSPATH 设置得当:
$sudo cp ./HelloWorld.class /Library/Java/Extensions/
$java -cp /Library/Java/Extensions HelloWorld
Hello, World!
问题:
- 是否有一种干净的方法让 Mac OS Java 14 接受 /Library/Java/Extensions 之外的文件的
-cp <CLASSPATH>设置? - 如果对 1) 的回答为“否”,是否有可在 Mac OS 命令行上使用的推荐替代 Java 安装?
谢谢!
【问题讨论】:
-
现代 macOS 没有 java。你一定是自己安装的。
-
我的理解是 all Java 实现以相同的方式处理
-cp。因此,您所看到的是由于 Java 在您的 Mac 上的安装方式或您使用它的方式。不幸的是,我们无法“深入了解”您的 Mac 找出真正的原因。
标签: java macos command-line classpath