Maven与ant

本文介绍了Maven和Ant在项目构建中的特点与区别。Maven以其项目对象模型(POM)、依赖管理和标准化的构建流程为项目管理带来便利,而Ant则以其灵活性见长。二者在项目构建上各有优势,建议结合使用,以Maven进行项目管理和规范,Ant处理特殊构建任务。文中还展示了如何在Maven的pom.xml中执行Ant脚本。

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>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值