繁体   English   中英

如何将 jar 文件中的文件夹放入类路径中?

[英]how to put folders inside a jar file into the classpath?

我正在维护一个以 dcm4che 作为其库的旧 java 应用程序。 dcm4che 库不仅仅是一个 jar 文件。 它是一个文件夹,其中包含 jar 文件和其他文件夹,其中一些属性文件和类位于不同的文件夹中。 我正在使用 WindowsXP 和 java 1.6。

当我们运行我们的应用程序时,我们需要通过执行以下操作将这些文件夹 jar 文件放入类路径中:

set CLASSPATH=.;%PROJ_HOME%\classes;^
%THIRDPARTY_HOME%\dcm4che;^
%THIRDPARTY_HOME%\dcm4che\classes;^
%THIRDPARTY_HOME%\dcm4che\resources;^

现在我尝试将它们全部放入一个 jar 文件中以简化源代码管理。 所以我创建了一个包含以下内容的 manifest.txt 文件:

Class-Path: classes;resources;lib\dcm4che.jar;getopt.jar

然后我通过运行 jar 创建一个 dcm4che.jar:

jar -cfm dcm4che.jar manifest.txt *

dcm4che.jar 已创建。 我通过提取所有内容来验证结果并检查清单文件,我的类路径在那里:

Manifest-Version: 1.0
Class-Path: classes;resources;lib\dcm4che.jar;getopt.jar
Created-By: 1.6.0_25 (Sun Microsystems Inc.)

然后我修改应用程序类路径以指向新生成的 dcm4che.jar 并删除那些旧条目。

当我运行它时,我得到 NoClassDefFoundError。 但是 class 位于新创建的 jar 文件内的 classes 文件夹下。

我错过了什么?

Java 不支持 jars 中的 jars。 因此,最简单的方法是扩展此文件并将其所有内容添加到类路径中。 我认为您可以使用脚本轻松完成此操作。 无论如何,您都有运行您的应用程序的脚本,对吧? 因此,添加几行将此文件扩展为临时或用户主目录。

如果您不想这样做或者由于其他原因被禁止,您必须实现自己的类加载器,从嵌套的 jar 加载 cliesse。 做起来并不难,但需要付出一些努力。 您可以使用来自 Jakarta 的 VFS。 它将简化实施。

但我建议你第一种方式。

您可以使用ONE-JAR将 package、class 文件和 jar 文件放入最终的可执行文件中。

jar 文件本质上是 zip 文件。

有多种实用程序可让您将 zip 文件挂载为只读驱动器或 dvd。

同样,有一些实用程序可以将 iso 映像挂载为 cd 或 dvd。 我沉迷于它们,因为它们非常有帮助。 特别是当一个软件坚持读取它的 DVD 并且我有几个这样的软件我希望同时运行并且我只有一个 DVD/CD 驱动器时。

一旦安装为 ROM 驱动器,嗯……不用多说。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM