为什么大多数命令行类路径被MacOSJava14忽略了?

ewm0tg9j  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(343)

我试图在MacOSCatalina(10.15.7)的命令行上运行java。在ubuntu18.04.5下一切正常,但在mac操作系统下失败。以下是规格:
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只是openjdkjava14,而在mac下使用的java似乎是macos附带的java14。如果我试着运行一个标准 HelloWorld.java 在ubuntu 18的命令行中,一切正常:

public class HelloWorld {
    public static void main (String [] args) {
        System.out.println("Hello, World!");
    }
}

编译:

$javac ./HelloWorld.java

跑步:

$java HelloWorld
Hello, World!

显式指定类路径,使用 -cp ,也适用于:

$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文件夹中。然后,只要适当地设置了类路径,一切都按预期工作:

$sudo cp ./HelloWorld.class /Library/Java/Extensions/
$java -cp /Library/Java/Extensions HelloWorld
Hello, World!

问题:
有没有一个干净的方法让MacOSJava14接受 -cp <CLASSPATH> 在/library/java/extensions之外的文件的设置?
如果对1)的回答是“否”,是否有可在mac os命令行上使用的推荐替代java安装?
谢谢!

zfciruhq

zfciruhq1#

我刚刚在我的mac上做了一个快速测试:

ravn@freewifi z % java -version
openjdk version "14" 2020-03-17
OpenJDK Runtime Environment (build 14+36-1461)
OpenJDK 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
ravn@freewifi z % javac HelloWorld.java
ravn@freewifi z % java HelloWorld
Hello, World!
ravn@freewifi z % type java
java is /usr/bin/java
ravn@freewifi z % /usr/libexec/java_home -V
Matching Java Virtual Machines (6):
    14 (x86_64) "Oracle Corporation" - "OpenJDK 14" /Users/ravn/Library/Java/JavaVirtualMachines/openjdk-14/Contents/Home
...
ravn@freewifi z %

看起来你的java是oraclejvm,而我的和你的ubuntujava是openjdkjvm,这可能解释了这一点。可能要调查的事情:你有classpath变量吗?是你的 java 指向系统二进制文件的命令?它是否正确配置为合适的jvm?

相关问题