1、ant与maven的特点
网上有人说maven是ant的扩展和替代品,感觉不完全正确,两者属于不同的应用范畴。
<1>Maven的应用优势在管理项目报告,生成站点,统一管理依赖JAR等工作,maven的特点是基于maven定义的标准去管理整个项目。Maven作为一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
<2>ant优势在于可以灵活的构建项目,而不是管理项目。
<3>maven提供了一系列的标准组件和标准去规范项目管理,使得使用的灵活性有一定的降低,但是规范化很好。而ant完全基于项目的构建,可以灵活的定义项目构建的task,但是这些ant脚本的通用性很低。
<4>开源官网:
ant的官网:http://ant.apache.org/
maven的官网:http://maven.apache.org/
2、Ant与Maven比较
<1>maven建立了一个POM(项目对象模型),项目的编译,脚本,依赖,插件等都以此模型为基础标准,进行管理,而ant直接采用自定义方式进行,没有统一的标准。
<2>Maven统一管理依赖的包,对包的名称,版本进行明确定义,不同项目共享依赖库,这样可以更加明确的管理项目中的所有依赖包。ant只是采用简单的include进行包的引用,没有明确的版本定义和依赖包的统一管理。
<3>maven中提供了很多可重用的脚本,直接引用即可,而ant则需要每次都去编写这些脚本,重用性也不高。
<4>maven是基于中央仓库的编译,将项目编译所需的所有资源都放到同一个中央仓库里,项目编译时,maven自动会到本地的中央仓库区查找,如果本地中央仓库没有,就在设定的远程仓库进行下载,存储到本地中央仓库。ant编译时,需要自己定义编译资源。这样使得maven项目发布时,会自动根据编译时的依赖关系进行发布依赖资源,不会将多余的资源加入项目。ant需要项目组自己管理,默认发布时会将所有的资源发布到项目中,这些资源中有些资源是不需要的。
<5>maven目前处于发展阶段,所以可视化开发等一些方面还存在不足,ant相对发展成熟,可视化应用较方便。
<6>maven侧重于项目的管理和标准化,所以就项目构建而言,灵活性不如ant,特别是在一些特殊的task方面,maven需要官方或者自己开发plugin,而ant则可以很灵活的进行自定义。
<7>笔者感觉两者结合使用,以maven为主,进行项目的整体管理和规范,以ant为辅,使用ant执行一些特殊的脚本,比如生成一些文件之类的,两者只有合作没有替代关系。
3、使用maven构建项目的pom.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.samuel.webproj</groupId>
<!-- 项目标识 -->
<artifactId>webmvc</artifactId>
<!-- 项目版本 -->
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>webmvcproj</name>
<build>
<!-- 项目插件 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<id>compile</id>
<!-- 一个phase -->
<phase>compile</phase>
<configuration>
<tasks>
<!-- 可运行ant脚本的环境 -->
<property name="compile_classpath" refid="maven.compile.classpath"/>
<property name="runtime_classpath" refid="maven.runtime.classpath"/>
<property name="test_classpath" refid="maven.test.classpath"/>
<echo message="${compile_classpath}"></echo>
<!-- 应用ant做特殊的脚本处理 -->
<ant antfile="${basedir}/build.xml">
<target name="java2hbm"></target>
</ant>
</tasks>
</configuration>
<!-- 绑定在phase上的goal -->
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>2.5.6</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>3.2.7.ga</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
本文介绍了Maven和Ant在项目构建中的特点与区别。Maven以其项目对象模型(POM)、依赖管理和标准化的构建流程为项目管理带来便利,而Ant则以其灵活性见长。二者在项目构建上各有优势,建议结合使用,以Maven进行项目管理和规范,Ant处理特殊构建任务。文中还展示了如何在Maven的pom.xml中执行Ant脚本。

1254

被折叠的 条评论
为什么被折叠?



