【问题标题】:how to put folders inside a jar file into the classpath?如何将jar文件中的文件夹放入类路径中?
【发布时间】:2011-07-21 16:32:11
【问题描述】:

我正在维护一个以 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 文件夹下。

我错过了什么?

【问题讨论】:

    标签: java jar classpath


    【解决方案1】:

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

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-05-08
        • 1970-01-01
        • 2015-08-14
        • 1970-01-01
        • 2011-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        相关资源
        最近更新 更多