【问题标题】:Difference between extracting and packaging libraries into a jar file将库提取和打包到 jar 文件中的区别
【发布时间】:2012-03-25 22:07:30
【问题描述】:

我想知道从 eclipse 中提取和打包库到 jar 文件和创建可运行的 jar 文件之间的区别。

如果我的程序(可运行 jar)使用其他需要这些外部库(jar)的类,我应该选择什么?

【问题讨论】:

标签: java jar executable


【解决方案1】:

如果你想将 jars 放入你生成的 jar 文件中,你可以使用打包的方法。 例如,如果您使用 Apache 库或其他一些 3rd 方 jar,您可能希望将这些 jar 保留在生成的 jar 中。在这种情况下,请使用包装。 “将所需的库打包到 jar 文件中” 选项将 org.eclipse.jdt.internal.jarinjarloader 包的类放入生成的文件中,并且该包位于生成的 jar 文件的根目录下。由于 Eclipse 的 jar 加载器类,此选项还会创建一个更大的 jar 文件。

提取所需的库将导致按照包命名约定将第 3 方库的类放入您的 jar 文件中,例如如果你打开你的 jar 内容,你可以看到 org.apache.. 包下的一些类。

这些jar文件的MANIFEST.MF文件之间的主类条目不同:

打包所需库时的主类条目:

Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

提取所需库时的主类条目:

Main-Class: YourMainClass

【讨论】:

  • 包装有什么好处或用处?
  • 通过打包,您可以通过“JarRsrcLoader”类将jar文件加载到您生成的jar中。如果您正在使用 3rd 方 jars 并希望将您的应用程序代码与这些 jars 结合起来,您可以像这样使用 eclipse 的打包实用程序。查看我编辑的答案。
  • 当心性能问题。直到昨天,我曾经使用 jarinjarloader 将我的库 jar 打包到我的应用程序 jar 中。然后,在将 JRE 更新到版本 8 update 31(在 Windows 上)之后,执行我的应用程序变得非常慢(高达 10 倍)。当我选择将库 jar 的内容提取到我的 jar 中时,问题就解决了。
  • 当然@Giuseppe 只有在加载类时才会发生性能下降;一旦应用程序运行,它应该没有什么区别......
  • @MikeW 这就是你的想法,但我的应用程序在整个运行“包”的过程中仍然慢了一个数量级。选择“提取”选项会使性能更快。
【解决方案2】:

就我的使用而言,主要区别在于打包 JAR 文件作为一个单独的项目完整地包含在内,因此保留了它们的版权信息和签名数据。

如果您选择 extract,类文件会从其原始上下文中提取出来并像您创建它们一样存储,因此可能违反某些许可条件,尽管最终 JAR 的大小将是在这种情况下更小。在这种情况下,Eclipse 也会警告您有关许可。

因此,如果使用第三方 JAR 库,始终打包是专业的。

【讨论】:

    【解决方案3】:

    尝试两种方式,然后使用 Zip 程序打开生成的 jar 文件。很有启发性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-19
      • 2017-07-30
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2011-09-30
      • 2012-08-05
      相关资源
      最近更新 更多