eclipse 导出可运行jar包时三种Library handling的区别

我们在eclipse中打包一个可运行的jar包的时候,Library handing中的选项有下面三种:
eclipse 导出可运行jar包时三种Library handling的区别_第1张图片
那么eclipse中Runnable JAR file的这三种打包方式有什么区别呢?

第一个Extract required libraries into generated JAR意思是将依赖的jar解压出来变成class丢进你生成的jar里面;
第二个Package required libraries into generated JAR意思是将依赖的jar不解压,直接放进你生成的jar里面;
第三个Copy required libraries into a sub-folder next to the generated JAR意思是将依赖的jar放到你生成jar的同级目录下的”xxx_lib”文件夹里面。
下面通过一个例子来说明,现在我这里有一个工程TestExport,这个Java工程的结构如下所示
eclipse 导出可运行jar包时三种Library handling的区别_第2张图片
现在Test这个类中,引用了一个我自己写的外部的jar包Command.jar。我们现在来使用上述三种方式来导出看看效果怎样

使用第一种方式导出(Extract required libraries into generated JAR)

导出Runable Jar file的方法

选择要导出的工程右键,选Export.
eclipse 导出可运行jar包时三种Library handling的区别_第3张图片
选择Java-->Runable JAR file-->Next
eclipse 导出可运行jar包时三种Library handling的区别_第4张图片
Launch configuration中选择程序的入口,也就是main方法所在的类。
Export destination中选择导出的位置,点击Browse...选出你要导出的位置即可。
然后在Library handing中选择Extract required libraries into generated JAR解压缩依赖包模式
点击Finish就可导出了
eclipse 导出可运行jar包时三种Library handling的区别_第5张图片

导出后找到该jar包用压缩工具打开
eclipse 导出可运行jar包时三种Library handling的区别_第6张图片
可以看到里面的内容
eclipse 导出可运行jar包时三种Library handling的区别_第7张图片
可以看到第一目录是我们工程的包目录,里面的内容如下。
eclipse 导出可运行jar包时三种Library handling的区别_第8张图片
第二个目录是配置文件目录,这目录是一定会有的不必管他。

第三目录是是解压依赖包Command.jar的到的,里面的内容如下。

eclipse 导出可运行jar包时三种Library handling的区别_第9张图片

使用第二种方式Runable JAR file

导出方法与前面的类似,不再说了。
这次选择以第二种方式导出,并且保存到另一个目录中,为了避免混乱。
eclipse 导出可运行jar包时三种Library handling的区别_第10张图片

接着还是,找到这个jar,然后用压缩工具打开。
eclipse 导出可运行jar包时三种Library handling的区别_第11张图片
打开结果如下
eclipse 导出可运行jar包时三种Library handling的区别_第12张图片
可以看到这种方式,是吧外部依赖包Comman.jar复制到我们导出的可执行jar包Test.jar包中。而不是和上面一样解压Command.jar包到Test.jar中。

使用第三种方式导出Runable JAR file

还是一样导出到另一个目录中
eclipse 导出可运行jar包时三种Library handling的区别_第13张图片
找到导出的这个jar,然后压缩工具打开
eclipse 导出可运行jar包时三种Library handling的区别_第14张图片
可以看到现在Test.jar的同级目录下多了个文件夹Test_lib,Test_lib中存放的是外部的依赖包Command.jar
eclipse 导出可运行jar包时三种Library handling的区别_第15张图片
而Test.jar中则干干净净,只有原来工程中的文件和配置文件
eclipse 导出可运行jar包时三种Library handling的区别_第16张图片
配置文件中指明了依赖包Command.jar的路径在同级目录下
eclipse 导出可运行jar包时三种Library handling的区别_第17张图片
如果我们把Test.jar剪切到其他地方去,这样Test.jar,就找不到Test_lib中的依赖包,这样将会运行错误。
例如这个吧Test.jar剪切到上级目录中,在cmd中输入java -jar Test.jar运行程序,此时程序会抛出异常:

Exception in thread "main" java.lang.NoClassDefFoundError: system/call/cmd/Command

eclipse 导出可运行jar包时三种Library handling的区别_第18张图片
这三者的区别就是这样

你可能感兴趣的:(IDE)