【问题标题】:When should I extract/package required libraries into generated JARs?我什么时候应该将所需的库提取/打包到生成的 JAR 中?
【发布时间】:2017-06-07 15:13:47
【问题描述】:

Difference between extracting and packaging libraries into a jar file 解释了如果您分别选择每个选项会发生什么。

我不明白什么时候会推荐一个选项高于另一个选项。

【问题讨论】:

  • "Fat" Jars 的缺点是,如果您在同一个名称空间内(跨多个 Jars)拥有资源,它们会发生冲突。您还必须考虑如何更新应用程序。当您可以下载单独的罐子时,真的值得下载整个应用程序吗?如果您在一个环境中工作,其中不同的应用程序使用相同的库 Jar,那么单独维护它们可能会更好。当您考虑原生包装器时,其中许多可以“包含”罐子在其中,一个胖罐子开始失去它的吸引力(恕我直言)
  • 这个问题的部分问题在于它是基于意见的。有些人只是“喜欢”胖罐子,有些人不喜欢,仅此而已。您必须了解自己对项目的个人利弊,并了解最适合您和项目的一般情况
  • @MadProggrammer 事情是,我以前从未导出过项目。我知道我不想“将所需的库复制到生成的 JAR 旁边的子文件夹中”。至于其他两个选项,我可以看到 Eclipse 对每个选项与其他问题的不同之处。我不明白的是,每个选项的最终结果是否存在功能差异会影响我的决定。例如,什么时候一个选项不起作用?期权何时会提供优势?它有什么优势?偏好是一回事,实际原因呢?
  • 我没有看到两者之间的“巨大”差异。诚然,您正在读取单个文件,而不是多个文件,因此“可能”有一点优势,我自己并没有费心对其进行基准测试。如果您在动态环境中操作(自己加载 Jars),那么胖 jar 并没有多大优势。同样,如果您使用某种元数据查找机制来配置应用程序的某些部分(加上动态类加载),那么您将遇到胖 jar 的问题(因为资源会被覆盖)

标签: java eclipse executable-jar


【解决方案1】:

将所需的库提取到 JAR - 从您的应用使用的库中提取实际的 .class 文件,并将这些 .class 文件放入可运行的 JAR 中。因此,可运行的 JAR 不仅包含应用程序的 .class 文件,还包含应用程序使用的所有库的 .class 文件。 如果 JAR 是分开的,那么用户只需下载包含您的应用程序代码的 JAR,而不是包含您的应用程序代码和所有库代码的单个、大量 JAR。 如果您更新您的应用程序,那么用户将不得不下载更多数据来更新应用程序。 1) 将所需的库打包到 JAR - 将库的实际 JAR 文件放入可运行的 JAR。通常,JVM 无法加载 JAR 文件中的 JAR 文件。但是 Eclipse 向可运行的 JAR 添加了特殊的类以使这成为可能。 2) 将所需库复制到 JAR 旁边的子文件夹中 - 将库 JAR 与可运行 JAR 完全分开,因此可运行 JAR 将仅包含应用程序的 .class 文件。

【讨论】:

  • 你所说的一切都可以在这个网站上找到。我想知道什么时候应该选择提取需要的库,什么时候应该选择打包需要的库。我排除了将所需库复制到问题子文件夹中的选项。
猜你喜欢
  • 2015-10-10
  • 2011-09-30
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-21
  • 2018-01-21
  • 2010-12-30
相关资源
最近更新 更多