Java 将库提取和打包到jar文件中的区别

Java 将库提取和打包到jar文件中的区别,java,jar,executable,Java,Jar,Executable,我想知道通过创建可运行的jar文件从eclipse中提取库和将库打包到jar文件之间的区别 如果我的程序(runnable jar)使用其他需要这些外部库(jar)的类,我应该选择什么?如果您想将jar放入生成的jar文件中,可以使用打包方法。 例如,如果您正在使用Apache库或其他一些第三方jar,您可能希望在生成的jar中保留这些jar。在这种情况下,使用包装。 “将所需库打包到jar文件”选项将org.eclipse.jdt.internal.jarinjarloader包的类放入生成的

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


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

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

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

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

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

Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Main-Class: YourMainClass
提取所需库时的主类条目:

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

在我看来,主要的区别在于,打包的JAR文件作为一个不同的项目完整地包含进来,因此保留了它们的版权信息和签名数据

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


因此,如果使用第三方JAR库,专业的做法是总是打包

尝试两种方法,并使用Zip程序打开生成的JAR文件。非常有启发性。

打包的优点和用途是什么?通过打包,您可以通过“jarsrcloader”类将jar文件加载到生成的jar中。如果您使用的是第三方JAR,并且希望将应用程序代码与这些JAR结合起来,那么可以像这样使用eclipse的打包实用程序。请参阅我编辑的答案。请注意性能问题。直到昨天,我一直使用jarinjarloader将我的库jar打包到我的应用程序jar中。然后,在将JRE更新到版本8 update 31(在windows上)之后,执行我的应用程序变得非常慢(高达10倍)。当我选择将库jar的内容提取到我的jar中时,问题就解决了;一旦应用程序运行,它应该不会有什么区别。…@MikeW这就是你所想的,但是我的应用程序在整个运行过程中仍然慢了一个数量级。选择“提取”选项可使性能更快。可能会重复