vecmath.jar 在 MacOS(11.5.1) 中应该放在哪里

Where should vecmath.jar go in MacOS(11.5.1)

序言:因此,这一切都是从尝试使用 javax.vecmath.Vector2d 开始的。我没有 javax.vecmath 所以我花了一点时间试图得到它,发现我需要下载 Java3D.

经过长时间尝试下载 Java3D for Java(版本 16.0.2),我最终将其与 vecmath.jar 文件一起登陆 [=14] =].这摆脱了 error: package javax.vecmath does not exist 错误消息。

然后,我收到了消息

<JAVA_HOME>/lib/ext exists, extensions mechanism no longer supported; Use -classpath instead.
.Error: Could not create the Java Virtual Machine.

这也不允许我在 shell 中使用任何 java 命令。

经过一些研究,我得出的结论是要移动(通过 Finder select 并拖动)j3dutils.jarvecmath.jarj3dcore.jarlib 并删除 lib/ext 目录。我已经摆脱了 <JAVA_HOME>/lib/ext exists 问题,但又回到了 error: package javax.vecmath does not exist.

我什至不知道该怎么办。我只想使用 javax.vecmath。我会以完全错误的方式解决这个问题吗?我怎样才能让它工作?

jar文件可以放在你想放的地方,移动到你项目的lib文件夹下就好了。真正的问题是你需要 classpath 来指向它。

Here 是一个完整的解释。

如果您是从命令行 运行 不需要设置 classpath 变量,您可以在 java 命令中提供它。应该是这样的:

java -cp lib/vecmath.jar Example

这假定您正在处理的程序已被编译成名为 Example.class 的 class 文件。如果您的主要方法在一个包中,您将需要完全限定 class 名称,因此它可能看起来像:

java -cp lib/vecmath.jar com.demo.Example

您可以在 class 路径中列出多个 jar 文件,以冒号 (:) 分隔。

您也可以在命令行中调用以下命令寻求帮助:

java -h

好的,我明白了。

如何在 Mac OS(11.5.1) 和 Java(16.0.2)

中使用 javax.vecmath

我给出的描述包括我为什么做事,如果您只想得到答案,请跳至底部的 TLDR。

第一步:下载最新版本Java3D

这包含 vecmath,以及 j3dcorej3dutils。它将下载一个 .zip 文件。解压缩文件,它将展开到一个新目录中,其中包含另一个 .zip 文件,j3d-jre.zip。解压缩 j3d-jre.zip ,它会扩展到一个目录 lib。 lib 内部将是一个子目录 ext,其中包含三个 .jar 文件:j3dcore.jarj3dutils.jarvecmath.jar。你可以把它们放在任何地方,只要确保你跟踪它们的位置(我把它们放在 ~/Library/Java/Extensions,这个位置在硬盘上,需要管理员密码才能做任何事情——使用

sudo unzip /path/to/j3d-jre.zip

如果您在 shell 中做事)。您可以将 ext 目录放在 JAVA_HOME/lib/ 中,但是在 Java 6 之后,这会导致问题。

第 2 步:更改 CLASSPATH

Java 不知道如何找到 vecmath.jar 所以你必须指定它。

选项 1:为每个 shell 命令指定 CLASSPATH

最简单的版本是使用

javac -cp ".:/path/to/vecmath.jar:" MyMainProgram.java

编译和

java -cp ".:/path/to/vecmath.jar:" MyMainProgram

到运行程序(你也可以用-classpath替换-cp,它会做同样的事情)

此选项永远不会破坏您的 CLASSPATH 但您还必须在每次编译时包含 -cp 命令和 运行 导入 javax.vecmath 的程序.

选项 2:为每个新终端指定 CLASSPATH window

-cp 更持久一点,您可以定义 CLASSPATH 这样任何更改只会在该终端 window 中发生。使用这种形式:

export CLASSPATH=".:/path/to/vecmath.jar:"

现在当你打电话时

javac MyMainProgram.java
java MyMainProgram

Java 将看到 CLASSPATH.:/path/to/vecmath.jar 并且所有内容都将编译并且 运行 无需添加 -cp 命令。

这个选项的主要缺点是,如果你再次更新CLASSPATH,你必须记得添加之前的CLASSPATH(你可以随时用echo $CLASSPATH看到)

选项 3:将 CLASSPATH 永久添加到终端

在终端中输入以下内容:

open ~/.bash_profile

这将打开一个 window,其中可能有也可能没有代码。不管任何预先存在的代码,滚动到底部并添加

export CLASSPATH=".:/path/to/vecmath.jar:"

此选项将永久保留所有终端 windows 中的 CLASSPATH 或直到您更改它(使用上述任何方法)。

TLDR

  1. 下载 Java3D for macOS

  2. 解压缩java3d-1_5_1-macosx.zip并打开它创建的目录

  3. 解压j3d-jre.zip打开新目录/lib/和子目录/lib/ext/

  4. vecmath.jarj3dcore.jarj3dmath.jar移动到~/Library/Java/Extensions(这需要管理员密码)或任何其他位置

  5. 运行 终端中的以下行:

    open ~/.bash_profile

  6. 到底部并添加以下内容:

    export CLASSPATH="/path/to/vecmath.jar:$CLASSPATH"

  7. 导入javax.vecmath.*到任何你想要的.java程序