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

我们在eclipse中打包一个可运行的jar包的时候,Library handing中的选项有下面三种:
这里写图片描述
那么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工程的结构如下所示
这里写图片描述
现在Test这个类中,引用了一个我自己写的外部的jar包Command.jar。我们现在来使用上述三种方式来导出看看效果怎样

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

导出Runable Jar file的方法

选择要导出的工程右键,选Export.
这里写图片描述
选择Java-->Runable JAR file-->Next
这里写图片描述
Launch configuration中选择程序的入口,也就是main方法所在的类。
Export destination中选择导出的位置,点击Browse...选出你要导出的位置即可。
然后在Library handing中选择Extract required libraries into generated JAR解压缩依赖包模式
点击Finish就可导出了
这里写图片描述

导出后找到该jar包用压缩工具打开
这里写图片描述
可以看到里面的内容
这里写图片描述
可以看到第一目录是我们工程的包目录,里面的内容如下。
这里写图片描述
第二个目录是配置文件目录,这目录是一定会有的不必管他。

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

这里写图片描述

使用第二种方式Runable JAR file

导出方法与前面的类似,不再说了。
这次选择以第二种方式导出,并且保存到另一个目录中,为了避免混乱。
这里写图片描述

接着还是,找到这个jar,然后用压缩工具打开。
这里写图片描述
打开结果如下
这里写图片描述
可以看到这种方式,是吧外部依赖包Comman.jar复制到我们导出的可执行jar包Test.jar包中。而不是和上面一样解压Command.jar包到Test.jar中。

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

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

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

这里写图片描述
这三者的区别就是这样

猜你喜欢

转载自blog.csdn.net/xiaokanfuchen86/article/details/113919445
今日推荐