【问题标题】:Java : create jar executable with dependant jars embeddedJava:创建嵌入依赖jar的jar可执行文件
【发布时间】:2011-11-29 14:58:03
【问题描述】:

我已经创建了一个带有清单的可执行 JAR:

Manifest-Version: 1.0
Main-Class: MyClass
Class-Path: lib/ext.jar

如果我在创建的 .jar 文件夹中有包含依赖 ext.jar 的文件夹 lib,我可以成功运行此 JAR。

我想在我的可执行 JAR 中嵌入 ext.jar 以便在我想要的任何地方启动它,而无需创建 lib 文件夹。这将允许 JAR 文件是自包含的,包括其所有依赖项。

有什么办法吗?

【问题讨论】:

  • 我建议使用 Maven 构建。见链接:stackoverflow.com/questions/1729054/…
  • 应用程序。有图形用户界面吗?如果是这样,更好的部署选项可能是Java Web Start。 JWS 使得向应用程序的运行时类路径添加额外的 Jars 变得简单。更好的是,JWS 可以提供简洁的桌面快捷方式或菜单项(带有自定义图标)来启动应用程序。
  • @AndrewThompson 可以在没有 GUI 的情况下使用 JWS 吗?而且我猜您还可以创建一个 .jnlp 并将其与您的 jar 一起分发(那么没有“Web”)?
  • "在没有 GUI 的情况下使用 JWS?" 不,它是针对应用程序的。带有图形用户界面。正如(我认为是)在链接中清楚地解释了。 “我猜你也可以创建一个 .jnlp 并将其与你的 jars 一起分发(那么没有“Web”)?” 不,它旨在从 Internet 或某种网络启动。他们没有将其称为“Java Web Start”,而是将扩展名命名为“Java Network Launch Files”。 ;)

标签: java jar executable


【解决方案1】:

默认的 Java 类加载器在 jar 文件中找不到嵌入的 jar。您需要将 Java 程序设置为使用可以处理嵌入式 jar 文件的类加载器。据我所知,我还没有在任何开源库中看到过,因此您可能需要自己编写一个。

或者,您可以提取所有 jar 文件并将内容合并到一个 jar 文件中。

Clean way to combine multiple jars? Preferably using Ant

【讨论】:

  • “没办法”是完全不正确的。它只需要一个能够理解嵌入式 jar 的 Classloader - 比如 one-jar。
  • @ThorbjørnRavnAndersen 感谢您的更正。我也不知道为什么这么说
【解决方案2】:

Java 没有对在 jar 中嵌入 jar 的开箱即用支持。这可以通过编写自定义类加载器或使用已为此目的编写的工具来实现:Fat Jar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多