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

问题描述:

我正在维护一个拥有dcm4che作为库的旧java应用程序。 dcm4che库不仅仅是一个jar文件。它是一个包含jar文件和其他文件夹的文件夹,其中一些属性文件和类位于不同的文件夹中。我正在使用WindowsXP和Java 1.6。如何将文件夹内的jar文件放入类路径中?

当运行我们的程序,我们需要把这些文件夹,JAR文件到classpath中通过做一些这样的:

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 

然后,我通过运行罐子创建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文件夹下。

我错过了什么?

Java不支持罐子里的罐子。所以,最简单的方法是展开这个文件并将它的所有内容添加到classpath中。我认为你可以使用脚本轻松做到这一点。无论如何你有脚本来运行你的应用程序,对吧?因此,添加几行将该文件扩展到临时或用户主目录。

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

但我会推荐你​​第一种方式。

+0

你现在不是正确的,我想。检查这个:http://download.oracle.com/javase/tutorial/deployment/jar/index.html – 5YrsLaterDBA

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

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

有各种实用工具可让您将zip文件作为只读驱动器或dvd加载。

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

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