【问题标题】:Creating a Java application that downloads its own dependencies创建一个下载其自身依赖项的 Java 应用程序
【发布时间】:2012-01-22 18:42:50
【问题描述】:

我对如何分发具有大量依赖项(在 Maven 中的 pom.xml 中指定)的 Java 应用程序感兴趣。

显然,可以将所有内容打包到一个大的 .jar 文件中。然而,这似乎很浪费,因为更新应用程序还需要发送所有依赖项的新副本。

所以我正在寻找一种分发应用程序的方法,该应用程序执行以下操作:

  • 仅在主 .jar 文件中包含核心应用程序
  • .jar 文件运行时根据需要下载依赖项
  • 在本地保留依赖项的副本,以便在分发应用程序更新时无需再次下载依赖项

实现这一目标的最佳方法是什么?

【问题讨论】:

  • 在有人建议之前,OSGi 在这里似乎有点过头了,但我相信它具有即时下载和更新捆绑包的出色功能,即使无需重新启动。
  • 这对你现在没有帮助,但我想我会提到在 JDK 本身的层面上解决这个问题的工作正在进行中。它被称为 Project Jigsaw,目前计划包含在 JDK 8 中。在此处阅读有关它的更多信息:openjdk.java.net/projects/jigsaw
  • @ivantod:三年后。 JDK 8 出来了。还没有拼图。不过,仍在路线图上。
  • @Thilo 是的,我知道 :( Jigsaw 在 2013 年底的某个时候被转移到 JDK 9,因为他们需要更多时间。然而,去年 11 月在 Devoxx Java 会议上,Paul Sandoz 演示了一个实际的javac 能够编译模块和所有这些,所以看起来它最终可能适用于 JDK 9。但考虑到 Jigsaw 最初是为 JDK 7 设计的(信不信由你),当我相信它时看看吧。

标签: java deployment maven dependencies distribution


【解决方案1】:

你可以只使用 Maven,就像 Maven Run Project 中描述的那样吗?

这就是我在自己的网络中设置一些自己的应用程序的方式。很长一段时间以来,我都不需要担心弄乱类路径或为这样的程序设置下载/提供依赖项。这种方法也符合您的所有标准。

【讨论】:

  • 是的,可能还有一个围绕 maven 的包装器,这样用户就不必处理它了。推送更新只会改变几个 pom,其余的由 maven 负责。
【解决方案2】:

您可以使用web start technology 分发您的文件(又名分发一个 jnlp 文件)。我相信这将为您处理大部分功能,包括可更新性。

【讨论】:

  • 另请参阅Java Web Start 标签信息,其中包括上述链接和另外 8 个链接,以及 JWS 的“面向开发人员”的描述。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-05
  • 1970-01-01
  • 2022-07-11
  • 2012-05-17
  • 2021-07-07
  • 2015-07-12
  • 2010-09-06
相关资源
最近更新 更多