Ant与Maven的区别对比

3年前我开始使用Ant,当时觉得它十分方便,配置文件的自由拷贝、源码目录的自由选择、多版本jdk的打包在一个build.xml中就可以搞定,再也不用贴来岾去的修改eclipse导出的war包了。项目内的目录可以根据不同需要去分类,最后在build.xml文件中融合。

3年后,通过一个项目我使用了maven,只是一次接触就让我放弃了Ant 我变心了!!

它们各自有各自的优点,针对不同的需求可以选择不同的编译器。

我觉得ANT更适合框架类的开发,在一个项目中有多个功能的子模块,每一个子模块都需要打包成jar包提供给外部使用。最典型的例子就是commons-*.jar,当我们要使用DBCP数据库连接池时,在我们的项目中便需要添加commons-logging.jar、commons-dbcp.jar等等。commons就是一个项目的名称,而logging、dbcp就是他的子模块,我们可以在build.xml中配置,当我们需要打包logging的时候只需要将org.commons.logging的源代码拷贝到build目录下编译打包就可以了,当我们再需要编译dbcp模块的时候也只是提取dbcp目录下的源码即可,它们互不干扰各自独立。

ANT的每一步操作都是一组标签没有固定的意思,只有名字()做为唯一ID可以区分它们的工作。除了可以分类源码目录,还可以定义多个target用于区分不同版本的jdk,再或者你的开发环境与测试环境所需要的配置文件也不尽相同,那你也可以分成两个target让他们各自干各自的事,只要你能想的到千变万化的需求在一个build.xml文件里都可以完成。而MAVEN只能记录一个流程,它的每个标签都有固定的意义,不同的需求可以通过多个pom.xml来定义。所以说,这完全是由个人的喜好来决定的。

放弃ANT的主要原因在于LIB的使用,我们每开发一个项目都需要去配置环境变量、引入第三方JAR包以及最后打成jar或war包。如果我希望JAR不要冗余,那么我会创建一个目录将所有的JAR放到统一的目录里,通过eclipse引入所需要的JAR包;更甚至在eclipse里创建一个公共的User Liberay,直接引入这个lib变量。一个工具类或框架类的app项目会这样使用,当它再将自己打包成jar时它可以不包含其它的jar包,但是对于WEB项目或者可执行类的JAR包时,这种引入的方式便显得力不从心了。WEB项目我们还可以将jar包拷贝到web-inf\lib目录下,然后通过eclipse将lib目录引入到项目中。可是,无论开发哪种项目,在使用ANT编译打包时都需要重新配置。相对来讲WEB项目还容易一些,只需要将lib目录添加到build.xml即可,要是打包可执行类的Jar包,嘿嘿~~!!你必须将第三方的jar包全称都添加到build.xml中,错一个字都不行

而MAVEN最大的特点就是它的LIB仓库,一次配置终(you)身(dian)受(kua)用(zhang)。maven有个世界级的lib仓库它是开源的,任何公司或个人都可以向内添加自己的jar包,然后生成唯一的标签信息以供其它开发者来使用。当然你也可以在公司内部建立一个小型的局域仓库将公用的jar包以及内部框架放在上面供开发人员使用,避免网络的瓶颈重复下载。而开发者,当你需要使用某个jar时,只需要将对应的标签添加到pom.xml文件中,maven就可以帮你去搜寻、下载、配置环境等不用重(lan)复(de)配(yao)置(si),当然你也可以使用web-inf\lib下的jar,同样也是只配置一次就可以完成配置环境、编译、打包的工作。

例举ANT与MAVEN的配置

ANT

basedir="." default="usage" name="Biz">

name="init">

name="Name" value="Biz" />

name="name" value="biz" />

name="version" value="1025" />

name="year" value="2014" />

message="----------- ${Name} ${version} [${year}] ------------" />

name="debug" value="on" />

name="optimize" value="on" />

name="deprecation" value="on" />

name="base.src.dir" value="${basedir}/src" />

name="webroot" value="${basedir}/WebRoot" />

name="JAR" value="${basedir}/WebRoot/WEB-INF/lib" />

name="ant.build" value="${basedir}/AntBuild/build" />

name="ant.bin" value="${basedir}/AntBuild/bin" />

name="ant.dest" value="${basedir}/AntBuild/dest" />

name="ant.warsrc" value="${basedir}/AntBuild/warsrc" />

name="ant.warsrc.WEB-INF" value="${ant.warsrc}/WEB-INF" />

name="ant.doc" value="${basedir}/AntBuild/doc" />

name="ant.jar" value="${basedir}/AntBuild/jar" />

name="ant.war" value="${basedir}/AntBuild/war" />

name="tomcat.home" value="D:\java\Tomcat" />

id="classpath.app">

dir="${JAR}">

name="**/*.jar" />

id="classpath.web">

dir="${JAR}">

name="**/*.jar" />

dir="${ant.warsrc.WEB-INF}/lib/">

name="**/*.jar" />

token="year" value="${year}" />

token="version" value="${version}" />

token="date" value="${TODAY}" />

token="log" value="true" />

token="verbose" value="true" />

name="prepare-mkdir" depends="usage,clean">

dir="${ant.build}" />

dir="${ant.bin}" />

dir="${ant.jar}" />

dir="${ant.dest}" />

dir="${ant.war}" />

dir="${ant.warsrc}" />

name="prepare-service" depends="prepare-mkdir">

todir="${ant.build}">

dir="${base.app.dir}">

name="**/wy/app/service/**" />

name="prepare-webcode" depends="prepare-mkdir">

todir="${ant.build}">

dir="${base.web.dir}">

name="**/my/**" />

name="*.xml" />

name="*.properties" />

name="prepare-webroot" depends="prepare-webcode">

dir="${ant.warsrc.WEB-INF}" />

dir="${ant.warsrc.WEB-INF}/classes" />

dir="${ant.warsrc.WEB-INF}/lib" />

todir="${ant.warsrc.WEB-INF}">

dir="${webroot}/WEB-INF">

name="**/web.xml" />

todir="${ant.warsrc.WEB-INF}/classes">

dir="${base.web.dir}">

name="*.xml" />

name="*.properties" />

todir="${ant.warsrc.WEB-INF}/lib/">

dir="${JAR}">

name="log4j-1.2.9.jar" />

name="ojdbc14_10g.jar" />

name="jdom.jar" />

name="commons-dbcp-1.2.1.jar" />

name="commons-pool-1.2.jar" />

name="commons-collections-3.1.jar" />

dir="${JAR}/proxool-0.9.1/lib">

name="proxool-0.9.1.jar" />

name="proxool-cglib.jar" />

file="${ant.jar}/${name}-${version.app}.jar">

dir="${ant.jar}">

name="**/${name}.jar" />

name="prepare-web-style2" depends="prepare-webroot">

todir="${ant.warsrc}" overwrite="true">

dir="${style2.dir}">

name="**/assets/**"/>

name="**/build/**"/>

name="**/demo/**"/>

name="prepare-web-style3" depends="prepare-webroot">

todir="${ant.warsrc}" overwrite="true">

dir="${style3.dir}">

name="prepare-web-style4" depends="prepare-webroot">

todir="${ant.warsrc}" overwrite="true">

dir="${style4.dir}">

name="build.app" depends="init">

srcdir="${ant.build}" destdir="${ant.dest}" debug="${debug}" includeantruntime="false" optimize="${optimize}" encoding="utf-8" target="1.5">

refid="classpath.app" />

name="build.web" depends="usage">

srcdir="${ant.build}" destdir="${ant.warsrc.WEB-INF}/classes" debug="${debug}" optimize="${optimize}" encoding="utf-8" target="6.0">

refid="classpath.web" />

name="WAR" >

warfile="${ant.war}/${Name}.war" webxml="${ant.warsrc.WEB-INF}/web.xml">

dir="${ant.warsrc.WEB-INF}/lib" />

dir="${ant.warsrc.WEB-INF}/classes" />

dir="${ant.warsrc}">

name="jar.myapp" depends="build.app">

jarfile="${ant.jar}/${name}-${version.app}.jar" basedir="${ant.dest}" includes="**/*.*">

name="Version" value="${version.app}"/>

name="Author" value="Amkio.wu"/>

name="jar.myapp.service" depends="prepare-app-service,build.app">

jarfile="${ant.jar}/${name}-service.jar" basedir="${ant.dest}" includes="**/*.*">

name="Version" value="${version.app}" />

name="Author" value="wuhan" />

name="jar.myapp.sub" depends="prepare-app-sub,build.app">

jarfile="${ant.jar}/${name}-${base.app.subdir}.jar" basedir="${ant.dest}" includes="**/*.*">

name="Version" value="${version.app}" />

name="Author" value="wuhan" />

name="jar.run" depends="build.web">

jarfile="${dist}/${name.run}.jar" basedir="${ant.dest}" includes="**/*.*">

name="Main-Class" value="${main-class}" />

name="Class-Path" value="${class_path}" />

name="clean" depends="init">

dir="${ant.build}" />

dir="${ant.bin}/org" />

dir="${ant.bin}/com" />

dir="${ant.dest}" />

dir="${ant.warsrc}" />


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<groupId>myappgroupId>

<artifactId>wy.appartifactId>

<version>0.0.3version>

<packaging>warpackaging>

<build>

<resources>

<resource>

<directory>src/main/javadirectory>

<includes>

<include>**/*.xmlinclude>

<include>**/*.propertiesinclude>

includes>

resource>

<resource>

<directory>src/main/resourcesdirectory>

<includes>

<include>**/*.xmlinclude>

includes>

resource>

resources>

<plugins>

<plugin>

<artifactId>maven-compiler-pluginartifactId>

<configuration>

<source>1.6source>

<target>1.6target>

<encoding>UTF-8encoding>

configuration>

plugin>

<plugin>

<artifactId>maven-resources-pluginartifactId>

<configuration>

<encoding>UTF-8encoding>

configuration>

plugin>

<plugin>

<artifactId>maven-site-pluginartifactId>

<configuration>

<locales>enlocales>

<inputEncoding>UTF-8inputEncoding>

<outputEncoding>UTF-8outputEncoding>

configuration>

plugin>

<plugin>

<groupId>org.apache.maven.pluginsgroupId>

<artifactId>maven-jar-pluginartifactId>

<version>2.2version>

<configuration>

<archive>

<manifestEntries>

<Svn-Revision>${SVN_REVISION}Svn-Revision>

<Build-Tag>${BUILD_TAG}Build-Tag>

<Build-Number>${BUILD_NUMBER}Build-Number>

<Build-Id>${BUILD_ID}Build-Id>

manifestEntries>

archive>

configuration>

plugin>

<plugin>

<groupId>org.apache.maven.pluginsgroupId>

<artifactId>maven-war-pluginartifactId>

<configuration>

<archiveClasses>truearchiveClasses>

<archive>

<manifest>

<addClasspath>trueaddClasspath>

<classpathPrefix>lib/classpathPrefix>

manifest>

<manifestEntries>

<Specification-Title>${project.name}Specification-Title>

<Specification-Version>${project.version}Specification-Version>

<Svn-Revision>${SVN_REVISION}Svn-Revision>

<Build-Tag>${BUILD_TAG}Build-Tag>

<Build-Number>${BUILD_NUMBER}Build-Number>

<Build-Id>${BUILD_ID}Build-Id>

manifestEntries>

archive>

configuration>

plugin>

plugins>

build>

<dependencies>

<dependency>

<groupId>commons-dbcpgroupId>

<artifactId>commons-dbcpartifactId>

<version>1.4version>

dependency>

<dependency>

<groupId>commons-poolgroupId>

<artifactId>commons-poolartifactId>

<version>1.2version>

dependency>

<dependency>

<groupId>log4jgroupId>

<artifactId>log4jartifactId>

<version>1.2.14version>

<scope>compilescope>

dependency>

<dependency>

<groupId>commons-langgroupId>

<artifactId>commons-langartifactId>

<version>2.6version>

dependency>

<dependency>

<groupId>javax.servletgroupId>

<artifactId>jstlartifactId>

<version>1.2version>

dependency>

dependencies>

<name>wy-appname>

project>


 
  



你可能感兴趣的:(ant,maven)