我正在维护一个以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.jarjar -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文件夹下。
我错过了什么?
答案 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驱动器安装,嗯......不用再说了。