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

时间:2011-07-21 16:32:12

标签: java jar 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。但是该类位于新创建的jar文件中的classes文件夹下。

我错过了什么?

3 个答案:

答案 0 :(得分:0)

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

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

但我建议你采用第一种方式。

答案 1 :(得分:0)

您可以使用ONE-JAR将类文件和jar文件打包到最终的可执行文件中。

答案 2 :(得分:0)

jar文件本质上是一个zip文件。

有各种实用程序可以将zip文件作为只读驱动器或DVD安装。

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

一旦作为ROM驱动器安装,嗯......不用再说了。