如何在 Windows 7 上通过 CLASSPATH 环境变量访问 Java JAR

如何在 Windows 7 上通过 CLASSPATH 环境变量访问 Java JAR

我知道关于 Linux 上的 JAR 文件的文章,但解决方案涉及一些我不知道的 Linux 特定命令,最终我想了解是否可以在不编写脚本的情况下访问我的 JAR(以及它所依赖的 JAR)。

我在 Windows 7 上,我的主要 Java 类位于org.sync.MainEntry名为 的主 JAR 中synchronizer.jar。我将其依赖的所有其他 JAR 的绝对路径放入CLASSPATH计算机 -> 高级设置 -> 环境变量中的变量中。我甚至尝试将这些 JAR 移动到与我的主要 JAR 相同的文件夹中。

但是,当我执行(在命令提示符下,导航到我的主 JAR,有或没有其他 JAR)以下调用时:

java org.sync.MainEntry

我收到“无法访问 jarfile org.sync.MainEntry”错误。因此,我将全部 JAR 移至同一位置,然后执行

java -cp my_other_jar.jar;my_other_other_jar.jar;synchronizer.jar org.sync.MainEntry

最后终于成功了。或者我可以用 * 替换所有 jar。但是,我要么需要将所有 JAR 移动到同一个位置,要么输入完整路径,我觉得一定有办法不用每次都创建 shell 脚本或写出完整的 JAR 路径。

根据上面提到的文章,我很高兴接受看CLASSPATH不到 jar,只看到里面的类,但是 JAR 是一个档案,也许我可以以某种方式提取它们并指向CLASSPATH那里?

在此先感谢您的帮助!

答案1

JAR 文件是应用程序库。你可以将它们与 DLL 进行比较。但是 DLL 始终只是可执行文件将使用的代码库。JAR 可以只包含库代码,也可以包含应用程序本身。另一个区别是 Windows 可以集中/注册 DLL,以便可以发现它们。JAR 没有这样的概念。它们实际上只是属于特定 Java 应用程序的工件。它们在运行时共享,但很少见。Java 应用程序通常会随它一起交付全部运行所需的 JAR,并且不依赖目标系统上已存在的任何 JAR(Java 本身的 JAR 除外)。Java 人员往往不关心应用程序之间的这种重复,因为 JAR 通常相当小。

JAR 实际上只是.classJava 虚拟机使用的 ZIP 文件。ZIP 中始终有一个所谓的 MANIFEST 文件,这是它与传统 ZIP 的唯一区别。(既然它实际上只是一个 ZIP,为什么 Windows 无法浏览它?您需要向 Microsoft 咨询。使用适当的工具来处理压缩文件,我推荐 7Zip,而不是依赖 Windows 自己的工具)

任何 Java 应用程序在启动时都需要知道在哪里可以找到这些文件。这些文件可以单独存在于磁盘上,也可以捆绑在 JAR 文件中。结果是相同的。不过,从 JAR 中.class提取文件毫无意义。.class

Java 应用程序通常会附带启动器脚本,这样“客户”就不必编写自己的小.BAT文件(或其他文件)来启动应用程序。如果没有这样的脚本,您必须自己编写。

相关内容