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


Answers:


51

如果要将jar放入生成的jar文件中,则可以使用打包方法。例如,如果您使用的是Apache库或其他一些第三方的jar,则可能需要将这些jar保存在生成​​的jar中。在这种情况下,请使用包装。 “将所需的库打包到jar文件中”选项会将org.eclipse.jdt.internal.jarinjarloader软件包的类放入生成的文件中,并且该软件包位于生成的jar文件的根目录下。由于Eclipse的jar加载程序类,因此此选项还会创建一个较大的jar文件,其大小会有所增加。

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

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

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

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

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

Main-Class: YourMainClass

5
包装的优点或用途是什么?
ctekk 2012年

2
通过打包,您可以通过“ JarRsrcLoader”类将jar文件加载到生成的jar中。如果您使用的是第三方罐子,并且想将您的应用程序代码与这些罐子结合使用,则可以使用eclipse的打包实用程序,如下所示。看到我编辑的答案。
Juvanis 2012年

12
提防性能问题。我以前使用jarinjarloader将库jar打包在应用程序jar中,直到昨天。然后,在将JRE更新到版本8更新31(在Windows上)之后,执行我的应用程序变得非常慢(最多10倍)。当我选择将库jar的内容提取到jar中时,该问题已解决。
朱塞佩2015年

@Giuseppe当然,性能下降只会在加载类时发生;应用程序一旦运行,就不会有任何改变..
MikeW

1
@MikeW这就是您的想法,但是我的应用程序在使用“ package”运行的整个过程中仍然慢了大约一个数量级。选择“提取”选项可使性能更快。
dminear's

3

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

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

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


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.