
2.6 常用开发工具
俗话说“工欲善其事,必先利其器”,因此在进行Java Web程序开发之前,还需要掌握一些常用开发工具的使用,如Maven项目管理工具、CVS版本控制工具、日志工具以及报表图形引擎工具。
2.6.1 Maven项目管理工具
Maven是一个项目构建和管理工具,为开发人员提供了一个项目构建(build)的生命周期框架。Maven可以管理构建生命周期中的各个阶段(Maven的术语中称为目标goal),包括编译、构建、测试、发布、报告等。Maven也是“默认大于配置”的推崇者,使用标准的目录结构和默认的构建生命周期,同时帮助开发者管理项目依赖,因而开发者能够在非常短的时间里完成项目的配置工作,从而快速建立开发环境,极大提高开发效率。
那么,Maven和Ant有什么不同呢?Maven和Ant针对构建问题的两个不同方面。Ant为Java技术开发项目提供跨平台构建任务。Maven本身描述项目的高级方面,其从Ant借用了绝大多数构建任务。因此,Maven和Ant代表两个差异很大的工具,Maven是一个项目管理工具,包含了一个项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),以及用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。当使用Maven的时候,用一个明确定义的项目对象模型来描述项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
Maven最突出的特点是使用maven不需要上网单独下载jar包,只需要在配置文件pom.xml中配置jar包的依赖关系,就可以自动下载jar包到项目中。这样,其他人开发或者使用这个工程时,不需要来回地复制jar包,只需要复制这个pom.xml就可以自动下载这些jar包。而且,程序员自己下载jar包,还有可能造成版本的不一致,这样在协同开发的过程中就有可能造成代码运行不一致。通过使用Maven精确地匹配jar包,就不会出现这种问题了。
Maven通过特定的标识来定义项目名称,这样既可以唯一地匹配其他的jar包,也可以通过发布,使其他人能使用自己的发布产品。这个标识就被叫做坐标,其实就是简单的XML文件而已,如一个简单的pom.xml配置文件如下:
<groupId>com.test</groupId> <artifactId>maventest</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>maventest</name> <url>http://maven.apache.org</url>
❑ groupId:所述的项目名称,由于有的项目并不是一个jar包构成的,而是由很多的jar包组成的,因此这个groupId就是整个项目的名称。
❑ artifactId:包的名称。
❑ version:版本号。
❑ packaging:包的类型,一般都是jar,也可以是war之类。如果不填,默认是jar。
❑ name和url:一个是名称,一个是Maven的地址。主要就是上面的几个参数。
下面介绍创建简单Maven项目的方法。
(1)在MyEclipse的菜单栏中选择File→New→Other→Maven命令,得到如图2-21所示对话框。

图2-21 新建Maven项目
(2)接着选择Maven Project并单击Next按钮,进入下一个对话框后继续单击Next按钮得到如图2-22所示对话框。

图2-22 选择Maven项目存放位置
(3)然后选择Create a simple project,单击Next按钮,进入如图2-23所示界面,按图2-23所示输入参数。

图2-23 填写Maven项目参数
(4)填写好groupId、artfactId、version等信息后,单击Finish按钮,由此成功创建了一个简单的Maven项目,项目结构如图2-24所示。

图2-24 Maven项目结构
2.6.2 版本管理工具CVS
在团队开发中,需要团队各个成员之间进行分工配合,这就给源代码的版本控制带来很大困难,不可能手工来完成源代码版本的迭代,在这里选择使用版本控制工具,通过版本控制工具完成对源代码的控制,各个团队成员只需要把修改过的版本提交给版本控制工具,由版本控制工具把每个成员提交的版本整合成一个最新的版本。
版本控制的目的是解决文件同步问题。如果两个人修改了同一个文件,版本控制会采取一些机制,确保不会出错。版本控制还能保存文件的修改记录,并保存文件不同时期的内容。在一些大公司开发过程中,版本控制也称为软件配置管理(SCM)。常用的版本控制工具主要有开源的SVN、CVS、Perforce和微软的VSS等。
在源代码版本控制方面,有很多工具可供选择,在这里选择使用CVS来对版本进行控制,其中CVS需要客户端和服务器端配合使用,在使用CVS的时候,首先需要建立一个CVS服务器,然后团队中的每个成员此可以把自己的版本通过客户端提交给CVS服务器,从而由CVS服务器完成版本的整合更新任务。在这里选择使用CVSNT作为CVS的服务器,CVSNT的安装文件可以从http://www.cvsnt.org/archive下载,并且有各种版本的CVSNT安装文件可供下载。
CVSNT的安装过程比较简单,在安装向导的指引下就可以顺行安装。安装完成以后,需要重启计算机,然后才能正常使用CVSNT的功能。完成CVSNT安装以后,就可以配置CVSNT服务器。下面简单介绍CVSNT服务器的配置。
(1)选择软件中开始→CVSNT→cvsnt control panel命令,就可以进入CVSNT控制面板。在这个控制面板中,可以管理CVSNT的服务、添加CVS资源、设置CVSNT服务器的参数。
(2)然后选择repository config选项卡,单击Add按钮,就可以进入如图2-25所示添加资源界面。

图2-25 添加资源界面
(3)在如图2-25所示的界面中,可以把资源添加到CVS服务器中,其中,Location是要添加到CVS服务器中的资源路径,Name是CVS客户端访问这个资源需要的名称。Description是这个CVS资源的描述信息。输入这些信息以后,单击OK按钮就完成了资源的添加。
(4)资源添加完成以后,重新启动CVSNT的两个服务,使刚刚添加的CVS资源设置生效,重启这两个服务以后,就可以通过CVS客户端访问CVS资源了。
注意:当使用CVS客户端访问CVSNT服务器的时候,需要用户名和密码,这时候使用CVSNT服务器所在计算机的系统用户名和密码即可。
当CVS服务器安装配置结束以后,就可以通过CVS客户端访问CVS服务器中的资源。其中CVS客户端有很多中选择,如WinCVS、TortoiseCVS等,使用这些工具可以非常方便地访问CVS资源,在Eclipse中同样也内置了CVS客户端的功能。在下面的内容中就简单介绍如何使用MyEclipse内置的CVS客户端来访问CVS资源。
(1)在MyEclipse的菜单栏中选择Window→Show View→Other命令,就可以打开如图2-26所示的视图选择界面。

图2-26 CVS视图选择界面
(2)在如图2-26所示的视图选择界面中,选择CVS Repositories,然后单击OK按钮,就可以打开如图2-27所示的CVS视图。

图2-27 CVS视图
(3)在如图2-27所示的界面中,右击,在弹出的快捷菜单中选择New→Repository Location…命令,就可以进入如图2-28所示的连接CVS服务器的信息配置界面。

图2-28 添加CVS服务器信息界面
(4)在如图2-28所示的界面中,Host是CVS服务器所在的IP地址,在这里CVSNT的服务器就安装在本机上,所以输入localhost即可,Repository path即CVS资源的访问名称,也就是在CVSNT中设置的资源名称,用户名和密码使用CVSNT服务器所在计算机的用户名和密码,其他设置使用默认值即可。设置完这些信息以后,单击Finish按钮完成设置,就可以把CVS地址添加在如图2-27所示的CVS视图中。
(5)在CVS视图中右击添加成功的CVS服务器路径,在弹出的快捷菜单中选择Refresh Branches即可连接到CVS服务器,进入CVS资源选择界面。
(6)最后选择需要的资源,然后单击Finish按钮,就可以把CVS服务器上的这个资源导入到MyEclipse中。
2.6.3 日志工具
应用系统中,日志是不可缺少的重要组成部分,所有应用的出错信息等都应该能在日志文件中查找到。Java日志系统是一种不可或缺的跟踪调试工具,特别是在任何无人职守的后台程序以及那些没有跟踪调试环境的系统中有着广泛的应用。长期以来,日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有非常现实的意义。
常用的日志系统有:JDK1.4自带的Logging、Log4j、commons-logging、SLF4J等。
❑ JKD1.4自带的Logging:从JDK1.4起,JDK开始自带一套日志系统。JDK Logging最大的优点是不需要任何类库的支持,只要Java运行环境就可以运行。但是相对于其他日志控件,JDK自带的控件无论是易用性、功能还是扩展性都不如其他控件好用,基本上不适用。
❑ Log4j控件:是目前使用最广泛的日志控件,其把日志分为ALL、TRACE、DEBUG、INFO、WARN、ERROR、FITAL、OFF(由低到高)。
❑ commons-logging控件:是Apache Commons类库中的一员,Apache类库是一个通用的类库,提供了基础的功能,例如commons-fileupload、commons-httpclient、commons-io、commons-codec等。commons-logging不是一个日志控件,没有日志功能,其只是统一了JDK Logging与Log4j的API,并把日志功能交给JDK Logging或者Log4j。对于不能确定日志方式的系统,commons-logging是个不错的选择。Spring、Hibernate、Struts等都使用的是commons-logging。
❑ SLF4J称为Simple Logging Facade for Java,Java简单日志门面,类似于Apache Common-Logging,是对不同日志框架提供的一个门面封装,可以在部署的时候不修改任何配置即可接入一种日志实现方案,但是,它在编译时静态绑定真正的Log库。使用SLF4J时,如果需要使用某一种日志实现,那么必须选择正确的SLF4J的jar包的集合(各种桥接包)。比如slf4j-log4j12.jar,这样它就能将SLF4J的实际日志功能delegate给Log4j,所以还需要Log4j的jar包,即一共3个jar包:slf4j-log4j.jar、slf4j-api.jar和log4.jar。
上述4种常见日志控件的使用代码如下。
(1)基于Logging的常见代码如下。
import java.util.logging.Level; import java.util.logging.Logger; public class LoggerTest { private static Logger logger = Logger.getLogger(this.class.toString()); }
(2)基于Log4j的常见代码如下。
import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class LoggerTest { private static Logger logger = Logger.getLogger(this.class); }
(3)基于common-logging的常见代码如下。
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public LoggerTest { private static Log logger = LogFactory.getLog(this.class); }
(4)基于SLF4J的常见代码如下。
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public LoggerTest { private static Log logger = LogFactory.getLog(this.class); }
注意:完整的日志使用代码,参见本书配套电子资源第2章代码。
2.6.4 报表图形引擎
JFreeChart是Java平台上的一个开源图表绘制类库。其完全使用Java语言编写,是为Applications、Applets、Servlets以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。
(1)JFreeChart获取
JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下。
❑ JFreeReport:报表解决工具;
❑ JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp);
❑ JCommon:JFreeReport和JFreeChart的公共类库;
❑ JFreeDesigner:JFreeReport的报表设计工具。
下载地址为http://www.jfree.org/jfreechart/download.html,目前最新版本是jfreech-art-1.0.19.zip。
(2)JFreeChart配置安装
将下载好的jfreechart-1.0.19.zip解压缩后,将解压目录中lib下的jfreechart-1.0.19.jar、jcommon-1.0.23.jar导入到应用程序中,就可以进行图形报表程序的开发。安装配置好JDK开发环境后,在其操作系统的命令行中运行:java -jar jfreechart-1.0.19-demo.jar,或双击运行其中的jfreechart-1.0.19-demo.jar演示文件,就可以得到不同图形的运行效果图,如图2-29所示。

图2-29 JFreechart演示程序
(3)在MyEclipse中创建Java Project项目
新建一个名为MyJFreeChart的Java project项目,然后右击项目,在弹出的快捷菜单中按Java Build Path→Libraries→Add Libraries操作路径添加相应的JFreeChart包,即jfreechart-1.0.19.jar、jcommon-1.0.23.jar,如图2-30所示。

图2-30 添加JFreechart开发包
(4)在项目中创建一个名为First.java的文件,输入如下代码:
import java.awt.Font; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PiePlot3D; import org.jfree.chart.title.TextTitle; import org.jfree.data.general.DefaultPieDataset; /** * 一个简单使用JFreeChart的例子. * 《Java EE架构设计与开发实践》-清华大学出版社,方巍,2017 */ public class First { /** *演示开始 * * @param args ignored. */ public static void main(String[] args) { //建立数据集 DefaultPieDataset data = new DefaultPieDataset(); data.setValue("Category 1", 43.2); data.setValue("Category 2", 27.9); data.setValue("Category 3", 79.5); //创建图表 JFreeChart chart = ChartFactory.createPieChart( "简单图表示例!", data, true, // legend? true, // tooltips? false // URLs? ); //中文乱码解决 TextTitle textTitle = chart.getTitle(); textTitle.setFont(new Font("黑体", Font.PLAIN, 20)); chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12)); //创建框架并显示图表 ChartFrame frame = new ChartFrame("First", chart); frame.pack(); frame.setVisible(true); } }
(5)最后单击保存编译源文件并运行程序,得到如图2-31所示运行结果。

图2-31 JFreechart简单示例运行结果
注意:更多其他形状的图表应用代码,参见本书配套电子资源第2章代码。