Ant是一个构建工具,自Maven出现以前,一直占据着很大的市场,目前来看Maven占据着上峰,因此推荐大家尝试使用Maven,我在上篇中简单的写了些关于Maven的搭建:《搭建Maven开发环境》,供参考。
关于Ant的文章很多,就不多做介绍,下面比较下Ant和Maven的异同点:
1. 定位:Ant是构建工具;Maven是软件项目管理和理解工具,Maven基本具备Ant的功能。
2. Ant将提供了很多可以重用的task,例如copy, move, delete 以及junit单元测试Maven则提供了很多可以重用的过程。我们可以把Maven看成是一个"build container"这个容器可以让我们重用从一系列的项目中抽像出来的build过程。
3. Maven对所依赖的包有明确的定义,如使用那个包,版本是多少,一目了然。而ant则通常是简单的inclde所有的jar。导致的最终结果就是,你根本无法确定JBoss中的lib下的common-logging是哪个版本的,唯一的方法就是打开META-INF目录下MANIFEST.MF。
4. maven有大量的重用脚本可以利用,如生成网站,生成javadoc,sourcecodereference,等。而ant都需要自己去写。
5. 还有一些其他的异同,种种迹象表明Maven如果不死,就会成为主流。
Xdoclet实际上就是一个自动代码生成工具,他可以生成各种各样的代码或配置文件(如果清楚xdoclet,也可以对他进行扩展)。在默认情况下,Xdoclet已经给我们提供了很多的解决方案。这些解决方案叫做plugin,即插件。在Xdoclet的官方网站上http://xdoclet.codehaus.org,我们可以获得关于他支持的所有plugin的情况。
Xdoclet通过plugin来支持代码的自动生成。我们要使用Xdoclet,可以将它定义为ant的一个任务。然后就可以使用Xdoclet了。在<xdoclet>标签内部使用Xdoclet,由于Xdoclet通常用来对源文件进行扫描,并读取源文件中的注释,然后再根据这些注释生成相应配置文件,所以,通常我们需要定义让Xdoclet扫描哪些源代码文件。对于这个需要,我们通过<fileset>标签来满足!
通过<component>标签,我们可以使用Xdoclet的众多plugin。
我们可以在java代码中使用类似于javadoc的注释,来表达更多的内容。这些额外的注释,通过使用Xdoclet工具,我们可以将他们转换为我们需要的各种配置文件。先看一个简单的例子(xdoclet-1.2.3和1.0版本有诸多不同):
比如有一个java文件的源代码如下:
package com.tgb.domain;
/**
* 用户实体类
* @author yuanfubiao
*@hibernate.class table="t_user"
*
*/
public class User {
private int id;
private String username;
private String password;
/**
* @hibernate.id generator-class="native"
*/
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
/**
* @hibernate.property
*/
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
/**
* @hibernate.property
*/
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
通过Xdoclet和Ant的结合使用,可以得到这个类Hibernate的映射文件,并且可以生成Hibernate配置文件,build.xml的配置内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="SSH构建脚本" default="生成Hibernate配置文件" basedir=".">
<property name="src.dir" value="${basedir}/src"/>
<property name="build.dir" value="${basedir}/bin"/>
<property name="webapp.dir" value="${basedir}/WebContent"/>
<property name="xdoclet.home" value="D:/Application/xdoclet-1.2.3"/>
<!-- 定义构建路径 -->
<path id="xdoclet.task.classpath">
<fileset dir="${xdoclet.home}/lib">
<include name="**/*.jar"/>
</fileset>
</path>
<taskdef
name="hibernatedoclet"
classname="xdoclet.modules.hibernate.HibernateDocletTask"
classpathref="xdoclet.task.classpath"
/>
<target name="生成Hibernate配置文件">
<hibernatedoclet destdir="src">
<fileset dir="${src.dir}/com/tgb/domain">
<include name="**/*.java"/>
</fileset>
<hibernatecfg
destinationFile="hibernate.cfg.xml"
dialect="org.hibernate.dialect.MySQLDialect"
driver="com.mysql.jdbc.Driver"
username="root"
password="1"
jdbcurl="jdbc:mysql://127.0.0.1/test_ssh"
showsql="true"
version="3.0"
hbm2ddl="update"
xmlencoding="utf-8"
/>
</hibernatedoclet>
</target>
<target name="生成hibernate映射文件">
<hibernatedoclet destdir="src">
<fileset dir="${src.dir}">
<include name="com/tgb/domain/*.java"/>
</fileset>
<hibernate version="3.0"/>
</hibernatedoclet>
</target>
</project>
以上是Ant+Xdoclet结合使用的情况,如此一来省时省力。