
3.5 使用第三方类文件
使用第三方的类文件是指在当前Java项目中使用由第三方编写完成的类,这些类可以存储在源程序文件(.java)、字节码文件(.class)或jar压缩包中。掌握使用第三方类的相关技术对实现团队合作,充分利用现有代码,提高开发效率是十分有利的。
3.5.1 使用其他源程序文件或字节码文件中的类
1.将其他类的源程序文件添加到项目
如果需要引用的由第三方编写的类包含在某个源程序文件中,在Eclipse环境中只需要将该源程序文件复制到本项目的源代码文件夹(src)下,并在包资源管理器中选择当前项目后按〈F5〉键刷新显示,即可看到新添加到项目中的源程序文件。若需要对其进行查看或修改,可双击该文件将其打开到代码编辑器中。
需要注意的是,如果第三方源程序文件来自于Internet或其他非本团队环境,可能需要使用package命令指定该类属于本项目所在的包。
2.将字节码文件添加到项目
如果需要使用的第三方类存储在某字节码文件中,则在Eclipse环境中将其添加到当前项目的操作步骤如下。
1)使用Windows记事本将.class文件打开,如图3-12所示,可以看到写在类名前面的包名。如果类名前面有多个用“/”分隔的字符串,如“xx/xx/xx/类名”,则表示类所在的包为:xx.xx.xx,如本例的com.sky.test。需要注意的是,用Windows记事本打开.class文件后只能查看不能进行任何修改。
2)在当前项目文件夹中(也可以是其他位置)创建一个文件夹,名称可根据需要自行命名。在该文件夹中再创建一个以.class文件所属的包名命名的子文件夹(如果包名称分为多级,则需要建立相应的多级子文件夹),并将.class文件存储其中。
3)右击项目名称,在弹出的快捷菜单中执行“构建路径”→“配置构建路径”命令。打开如图3-13所示的“Java构建路径”对话框,在“库”选项卡中选择“Classpath”(类路径)后,单击“添加类文件夹”按钮,在打开的对话框中选择前面自行命名的文件后,单击“确定”按钮。返回后单击“Apply and Close”(应用并关闭)按钮完成操作。

图3-12 显示在记事本中的.class文件

图3-13 “Java构建路径”对话框
4)最后需要在代码编辑窗口中使用import命令导入.class文件中包含的类。需要注意的是,描述类名时要书写包含包名的完整格式。
【演练3-3】新建一个Java应用程序项目YL3_3,将一个来自第三方的,保存在.class字节码文件中的Teacher类添加到本项目中,并在主方法中编写测试程序检验引用的效果。Teacher类的成员及说明见表3-1。
表3-1 Teacher类成员及说明

程序设计步骤如下。
1)使用Windows记事本程序打开Teacher.class文件,可以看到图3-14所示的类所在包为demo1。
2)在Eclipse环境中新建一个Java应用程序项目YL3_3,并创建主类和主方法。在项目文件夹中新建一个名为other的文件夹,在other下再创建一个名为demo1的子文件夹。将Teacher.class复制到其中。按〈F5〉键刷新后如图3-15所示,已添加到项目中的外部类。
3)在包资源管理器中右击项目名称,在弹出的快捷菜单中执行“构建路径”→“配置构建路径”命令,在弹出的对话框的“库选项卡”中选择“Classpath”后单击右侧“添加类文件夹”按钮;弹出如图3-16所示的对话框,并在该对话框中选择项目文件夹下,包含有.class文件的other子文件夹后单击“确定”按钮。返回后单击“Apply and Close”按钮,完成添加操作。

图3-14 查看.class文件的内容

图3-15 添加到项目的外部类

图3-16 选择类文件夹
4)在主方法中编写如下所示的测试代码。

5)运行程序检测结果。可以看到程序在控制台窗格中输出了正确的信息。需要说明的是,本项目的主类在创建时没有指定所在的包,所以系统将其置于默认的缺省包(default package)中。由于主类YL3_3与Teacher类不在同一个包中,所以import语句不能缺少。
3.5.2 使用Eclipse的导出功能创建JAR包
为了更好地管理和使用字节码文件,Java可以将若干相关的字节码文件组成一个扩展名为.jar的压缩包。打包后的字节码文件不仅可以继续在本项目中使用,也可以方便地应用到其他项目中。实际上无论是将Java源程序文件编译成字节码文件,还是将若干字节码文件打包成JAR文件,都是一种对类的封装。开发人员在使用时完全不必关心它是怎么实现的,只要对其结构和开放的接口有所了解即可。
Eclipse自带的导出功能适合当前项目中不包含其他外部.jar包的情况,若项目中还包含有其他外部.jar包,Eclipse的导出设置会比较烦琐一些。
使用Eclipse自带的导出功能创建不包含其他.jar文件的JAR包的操作步骤如下。
1)在包资源管理器中选择要打包的Java应用程序项目,执行“文件”→“导出”命令,打开图3-17所示的对话框。选择“Java”→“JAR文件”后单击“下一步”按钮。若选择“可运行的JAR文件”项,系统会自动将当前项目中的主类和主方法包含进来,并以此为程序运行的切入点。
2)在图3-18所示的对话框中选择要导出到JAR包的资源,本例选择的YL2_7项目中包含有两个类:YL2_7为主类,Teacher为自定义类。如果不希望JAR包能单独运行,仅仅为了在其他项目中引用Teacher类则可不选择主类YL2_7。通过“选择要导出的资源”列表框下面的4个复选框,可以指定以何种方式处理前面选择的资源,本例取默认项“导出生成的类文件和资源”。在“选择导出目标”下的“JAR文件”下拉列表中需要指定将生成的.jar文件保存到何处,如本例的“D:\Java\jartest.jar”。设置完毕后单击“下一步”按钮。

图3-17 选择导出方式

图3-18 选择要导出的资源
3)在图3-19所示的对话框中,用户可以选择是否将那些包含错误或警告的类文件也加入到JAR包中。一般取默认项单击“下一步”按钮即可。
4)系统在执行打包操作时默认会向包中添加一个清单文件(MANIFEST.MF),该文件存储在JAR包的META-INF文件夹中,记录了包的入口程序等信息。在一般情况下,在图3-20所示的对话框中取默认项“生成清单文件”即可。

图3-19 JAR打包选项

图3-20 JAR清单规范
在“密封内容”选项组中,可以对整个JAR包或部分内容进行“密封”。如果是对整个JAR文件进行密封,那就意味着包内所有的Package语句指定的包都被密封了。这些包一旦被密封,那么Java虚拟机在成功装载密封包中的某个类后,其后所有装载的带有相同包名的类必须都来自同一个JAR文件,否则将触发Sealing Violation安全异常。
在“选择应用程序入口点的类”选项组中,可以选择可运行JAR包的主类和主方法。若不希望JAR文件能单独运行此处可留空。
所有设置完成后单击“完成”按钮,即可在前面指定的输出文件夹中看到生成的.jar文件。由于.jar文件实际上就是一种压缩文件,所以若需要查看其中内容、解压出其中的类文件、修改清单文件时,可使用WinZip或WinRAR一类的解压缩工具软件。
3.5.3 安装和使用FatJAR插件
FatJAR是一个专门用于在Eclipse环境中创建JAR包的应用程序插件,使用它创建JAR包前首先要下载并将其添加到Eclipse环境中。
1.下载和安装FatJAR插件
插件的下载地址为http://kurucz-grafika.de/fatjar。执行Eclipse菜单“帮助”→“安装新软件”命令,在打开的对话框中单击“添加”按钮。在图3-21所示的对话框中填写插件名称和下载位置后,单击“确定”按钮。而后按屏幕提示完成安装并重启Eclipse即可。

图3-21 添加Fat jar插件
需要说明的是,在高版本Eclipse中安装FatJAR插件需要先安装低版本插件支持。本教材使用的Eclipse Oxygen对应Eclipse 4.7属于高版本,故在安装FatJAR前应执行Eclipse菜单“帮助”→“安装新软件”命令,在图3-22所示对话框的“Work With”文本框中输入http://download.eclipse.org/eclipse/updates/4.7,经过一段时间的搜索后,在可用软件列表中选择“Eclipse Tests,tools, Examples, and Extras”→“Eclipse 2.0 Style Plugin Support”(Eclipse 2.0格式插件支持)后单击“下一步”按钮。而后按屏幕提示完成安装并重启Eclipse。支持插件安装完毕后,再按上述步骤完成FatJAR的安装。

图3-22 安装低版本插件支持
2.使用FatJAR创建JAR包
FatJAR成功安装后,在Eclipse包资源管理器中右击项目名称,在弹出的快捷菜单中就会多出一个“Build Fat Jar”命令,执行该命令将打开图3-23所示的对话框。
1)在“Jar-Name”文本框中输入要保存JAR包的位置。如果需要保存到项目文件夹之外,还需要选择“use extern Jar-Name”复选框。
2)如果项目中包含有其他.jar文件,则应当单击“Main-Class”(主类)栏右侧的“Browse”按钮选择当前项目的主类。此外,还要选择对话框下方的“One-JAR”复选框,把一个依赖于多个其他.jar文件的应用程序发布成一个单一的可执行.jar文件。
3)单击“下一步”按钮后,在图3-24所示的对话框中需要选择希望打包到.jar文件中的内容,本例选择了程序的主类AddJAR.class和一个由外部导入的JAR包mytools.jar。最后单击“完成”按钮结束创建JAR包的操作。

图3-23 设置JAR包参数

图3-24 选择要打包的文件
3.5.4 引用第三方JAR包
向Java应用程序项目中添加外部JAR包的操作步骤如下。
1)如果要添加到项目中的.jar文件来自Internet或其他外部环境,首先需要使用WinRAR一类的解压工具将其打开,以便了解.jar文件的包命名情况,并确认需要使用的类名称。例如,需要使用的类位于A文件夹下的B子文件夹中,则该类文件隶属于包A.B。
2)在项目文件夹中新建一个子文件夹(通常会命名为jar或lib),将准备好的.jar文件复制到该文件夹中。在包资源管理器中选择项目名称后按〈F5〉键刷新,使复制到项目中的.jar文件可见。
3)右击复制到项目中的.jar文件,在弹出的快捷菜单中执行“构建路径”→“添加至构建路径”命令。
4).jar文件添加到项目后,通常需要在源程序文件中使用import语句添加对外部类文件的引用。
【演练3-4】已知forQE.jar文件中包含有一个用于解一元二次方程的QuadraticEquation类,该类的成员见表3-2。
表3-2 QuadraticEquation类成员及说明

要求将forQE.jar文件添加到Java应用程序项目,并在主方法中编写测试代码通过forQE.jar中的QuadraticEquation类,实现任意一元二次方程求解。
程序设计步骤如下。
1)在Eclipse环境中创建一个Java应用程序项目YL3_4,并添加主类和主方法。
2)使用WinRAR打开forQE.jar,可以看到图3-25所示的目录结构。故可以得出QuadraticEquation类隶属于sky.mytools包。

图3-25 forQE.jar的内部目录结构
3)在项目文件夹中新建一个子文件夹jar,并将forQE.jar复制到其中。在包资源管理器中选择项目名称后按〈F5〉键刷新,使复制到项目中的forQE.jar文件可见。
4)在包资源管理器中右击添加到项目中的forQE.jar,在弹出的快捷菜单中执行“构建路径”→“添加至构建路径”命令,完成外部JAR包的引用。项目结构如图3-26所示。
5)编写测试代码,通过引用的QuadraticEquation类,实现任意一元二次方程的求解。
按如下所示编写测试代码,程序运行结果如图3-27所示。


图3-26 项目结构

图3-27 测试程序运行结果
3.5.5 反编译.class文件
反编译是指将Java字节码文件还原成Java的源程序文件。常用的反编译工具有JD-GUI(Java Decompiler)和XJad,本节将以JD-GUI工具软件为例介绍Java字节码文件的反编译方法。
JD-GUI是一个单文件小工具,无须安装可直接运行。JD-GUI启动后,执行“File”→“Open File”命令,在打开的对话框中选择需要反编译的.class或.jar文件后单击“打开”按钮,即可在图3-28所示的JD-GUI工作界面中看到反编译后的源程序内容。

图3-28 使用JD-GUI反编译Java字节码文件
需要说明的是,任何一个反编译软件都不可能是万能的,其反编译得到的结果也并非与源程序完全一致(甚至还可能有一些错误),它仅仅是由计算机推算出来的、比较准确的一种可能。