超详细,手把手教你如何用eclipse为一个含有图片及第三方jar包的java工程项目打包
前引:网上关于这样的打包教程有很多,我也是通过查阅了很多大神的教程才摸索出打包的方法,但这些教程中都有一个共同的问题,都是老手写的,都是以一个老手的角度为一个新手才会遇到的问题写教程,这导致他们的教程描述的都是大致的流程框架(以新手的角度去看的话),而缺少了很多对细枝末节上的介绍,而恰恰是这些没介绍的细节是掐死一个新手的关键,我也是刚刚才成功地为我的项目打包,情绪非常亢奋,临时起兴决定写一篇文章,并以一个新手的角度尽可能的将所有细节配上图片去介绍这个教程
**
首先
我先做了一个关于此次教程的简单的小程序,并先简单的介绍这个小程序结构和功能,以方便读者在阅读之后的教程中有参考和代入感
程序功能: 输入ID号,点击查询,显示数据库中有没有这个人
注意: 可以看到界面中含有一张萨斯gay的图片,其次程序也连接了MYSQL,外加我还用了C3P0的连接池,意味着将用到三个第三方的Jar包,分别是:
①. mysql-connector-java-8.0.19.jar (用于连接MYSQL)
②. c3p0-0.9.5.2.jar (用于构造连接池)
③. mchange-commons-java-0.2.11.jar (用于支持第二个jar包)
因此,我们的打包过程将有两个任务要解决:
①.打包带走萨斯gay
②.打包带走这三个jar包
一. 打包图片问题
打包图片问题关键在于图片存放的位置和提取路径的代码
1.图片存放的位置
右击scr文件选择new中的package,在scr文件下 新建一个名为images的包,并将图片存放在这个包中
2.提取图片路径相关的代码
下面的代码简略的介绍如何使用存放在images包中的图片
JLabel label;
ImageIcon Sasuke;
URL imgUR = MainWin.class.getResource("/images/SASUKE.png"); //URL在java.net.URL包中,这个包用于一些网络编程
Sasuke = new ImageIcon(imgURL); //MainWin.class表示MainWin类生成的class文件
//getResource()方法用于提取MainWin.class所在的根目录
label = new JLabel(Sasuke);
// 注意"/images/SASUKE.png"中images前有/,因为这不是一个相对路径,我的理解是他在拼接出一个绝对路径
通过这样的方法保存图片后,可以为之后打包项目的过程中减少很多不必要的操作,因为scr文件下的所有文件是默认处在打包行列中,意味着你已不需要再去考虑打包这张萨斯gay,他一定会被打包
演示如何打包图片
右击项目文件夹Task1,点击Export选项
二.打包第三方Jar包问题
打包第三方jar包大概分两种方式,我亲切地称这两种方式分别为外接和内含
外接: 外接方式并没有将第三方的jar包与我们的项目打包在一起,这种方式只是通过修改配置文件中的几行代码以告知程序要使用的jar包在哪个文件夹下并去使用他
内含: 内含方式将第三方的jar包与项目打包在一起成一个jar包
我更倾向于采用内含方式,不是因为他的名字,因为后者打包操作简单,而且最终只生成一个jar包即可,这之后如果还要将这个jar包做成exe文件,甚至是安装软件,都会避免掉很多的操作和错误,但在这里我都依次介绍,君且博观约取,方以厚积薄发
(当然,“外接”与“内含”的概念只是我的推测,甚至可能都没有这样的概念)
外接方式
1.自定义配置文件
右击项目文件夹Tesk1,选择new的File,命名为manifest.mf(这里请照抄)
双击打开manifest.mf文件,并为其添入代码,如下:
Manifest-Version: 1.0
Main-Class: tesk.porject
Class-Path: Library/c3p0-0.9.5.2.jar Library/mchange-commons-java-0.2.11.jar Library/mysql-connector-java-8.0.19.jar
这里有很多注意点:
①. 第一行Manifest-Version: 1.0请照抄,指mf文件版本号
②. 每个:后都有且只有一个空格,如Main-Class: tesk.porject
③. Library/c3p0-0.9.5.2.jar与Library/mchange-commons-java-0.2.11.jar与Library/mysql-connector-java-8.0.19.jar间有且仅有一个空格
④. 请注意上述代码共有四行,不是三行,最后一行是空行,即不要让光标停在第三行尾部,而是停在第四行开头
⑤. Main-Class: tesk.porject 解释:Main-Class 指定程序的入口(请照抄),porject是我这个项目里含有主方法的
java文件,tesk是porject.java所在包的名字,不是项目文件名字,我这里命名时有点相似
⑥. Class-Path: Library/c3p0-0.9.5.2.jar 解释:Class-Path 指定jar包的依赖关系(请照抄),Library是随便命名的,先不要
管也没事,将在之后用到,c3p0-0.9.5.2.jar 是架包的名字(要一模一样)
2. 配置MF文件后,开始打包
右击项目文件夹Task1,点击Export选项
3. 在生成的jar包的同目录下新建一个名为Library的文件夹,并存入那三个jar包,方可成功运行
还要另建一个文件夹放jar包,这就是我称这种打包方式为外接的原因,甚至我觉得这都不能算是打包,点外卖就是点外卖,你不能说点的外卖里撒了点自己的胡椒粉就说是自己炒的,所以接下来介绍我极喜爱的内含方式。
内含方式
内含方式不需要再自定义配置文件,右击项目文件Tesk1,点击Export
这样桌面就会生成一个名为text11.jar的文件,且可以直接双击运行
有必要提的是当选择Runnable JAR file这个选项为我们项目打包时就意味着你已不用在为打包的第三方jar包的位置而分忧了,他会主动的从Referenced Library文件(或默认的lib文件)下找寻jar包并为你打包
附文:
这里分享一种检验打包是否成功的的方法,生成的jar包虽然是独立且单一的,但可以用360压缩(或任何压缩软件)解压她,然后去看看她封闭的内心里是否有我打包的文件
结尾
为项目打包成jar文件只是一个开始,因为jar文件只能在安装了jdk的环境下运行,若想跨平台可以通过exe4j将jar文件集成为exe可执行文件,更有甚者还可以在此基础上通过Inno Setup制作安装软件,但这些都是后话了。