【问题标题】:Why doesn't an executable jar acknowledge jars inside it?为什么可执行 jar 不承认其中的 jar?
【发布时间】:2011-11-27 21:14:38
【问题描述】:

我使用命令提示符制作了一个依赖于其他 jar 的可执行 jar,格式为

jar cvfm MyJarName.jar manifest.txt *.class dependentJar1.jar dependentJar2.jar

jar 制作正确,一切看起来都很好......但是在运行时,它会出现运行时错误,因为它找不到我的项目引用的类文件。探索创建的 jar,它所依赖的其他 2 个 jar 就在其中,它们应该在 manifest.mf 类路径中列出,但由于某种原因,java 是愚蠢的,实际上并没有查看这些 jar。

当这 2 个 jar 与所有者 jar 位于同一目录中时,java 能够找到它们并且工作正常。但我不想要这个;我希望那些罐子实际上在里面。这是怎么回事?如何使包含其他 jar 的可执行 jar 工作?

【问题讨论】:

    标签: java jar executable


    【解决方案1】:

    您可以使用OneJarjarjar(或其他任何一种)之类的东西将所有东西打包到一个罐子里。

    如果您使用 Maven 构建,您可以使用 Maven Shade Plugin

    可以使用像JarClassLoader 这样的自定义类加载器,它可以精确地满足您的需求。

    【讨论】:

    • ...您介意解释一下如何使用 onejar 吗?就像,对于我想做的事情,我该怎么做?我下载了,看起来很复杂
    • @Pojo 取决于您的构建方式; 最简单的可能是关注Ant example
    • 我不是。此外,我刚刚找到了一些方向...我正在执行此页面所述的命令行方法:one-jar.sourceforge.net/… 第 3 步中的“unjar”到底是什么意思?
    • @Pojo 表示解压jar文件; jar xf.
    • @Pojo 我猜这是要问一个新问题或与包维护者讨论的问题。如果您开始一个新问题,请确保包含那里的文件,因为它可能只是简单的名称更改而没有相应的文档更改。或者试试jarjar等
    【解决方案2】:

    我不认为你可以。也许使用定制的类加载器可以实现,但不是开箱即用。使用 maven shade 插件。

    【讨论】:

      【解决方案3】:

      如果您在 Eclipse 中使用 Ant Builder 并将引用的 jar 放入项目可访问的库中,Eclipse 将提取必要的类并将它们包含在您的可分发 jar 文件中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-27
        • 2017-03-20
        • 1970-01-01
        • 2020-12-02
        • 2014-10-02
        • 2011-05-08
        • 1970-01-01
        • 2013-07-29
        相关资源
        最近更新 更多