提取和打包库到jar文件之间的区别

cte*_*ekk 70 java executable jar

我想知道使用runnable jar文件创建从eclipse中提取和打包库到jar文件之间的区别.

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

Juv*_*nis 47

如果要将jar放入生成的jar文件中,可以使用打包方法.例如,如果您使用的是Apache库或其他第三方jar,您可能希望将这些jar保留在生成的jar中.在这种情况下,使用包装. "将所需的库打包到jar文件中"选项将org.eclipse.jdt.internal.jarinjarloader包的类放入生成的文件中,此包位于生成的jar文件的根目录下.由于Eclipse的jar加载器类,此选项还会根据大小创建更大的jar文件.

提取所需的库将导致通过遵循包命名约定将第3方库的类放入jar文件中,例如,如果打开jar内容,则可以在org.apache..包下看到一些类.

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

打包所需库时的主类入口:

Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Run Code Online (Sandbox Code Playgroud)

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

Main-Class: YourMainClass
Run Code Online (Sandbox Code Playgroud)

  • 注意性能问题.我曾经使用jarinjarloader在我的应用程序jar中打包我的库jar直到昨天.然后,在将JRE更新到版本8更新31(在Windows上)之后,执行我的应用程序变得非常慢(最多10倍).当我选择将库罐的内容提取到我的jar中时,问题就解决了. (12认同)
  • 打包的优点还是用途? (5认同)
  • 通过打包,您可以通过“ JarRsrcLoader”类将jar文件加载到生成的jar中。如果您正在使用3rd party jars,并且想要将您的应用程序代码与这些jars组合,则可以使用eclipse的包装实用程序,如下所示。看到我编辑的答案。 (2认同)

Mik*_*keW 5

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

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

因此,如果使用第三方 JAR 库,始终打包.