ant 实践应用

来源【原创】 / 1314人浏览
时间:2011-09-01 22:20:00
0
ant 实践应用

ant其实并非原生的Linux命令,但它 是一个使用广泛、功能强大的跨平台 构建工具程序,尤其是进行Java开发时,许多开源的Java项目都使用ant作为构建工具。 

ant 是apache自由软件基金会的一款开源软件,是java项目推崇的一款编译程序。 

在目前业界很多项目中采用ant结合shell脚本编写出效率高效的自动化编译部署脚本。

(功能说明:我在工作中所采用的是利用ant将项目文件check out到本地工作目录,然后对其编译,最后发布到发布目录)

 

ant部署步骤(很简单) 

1、下载好最新的ant文件,解压或者直接安装即可。

   下载地址:http://ant.apache.org/bindownload.cgi 下载apache-ant-1.8.1-bin.tar.gz   

   解压

   [root@localhost~]# cd /usr/local  

   [root@localhost~]# tar -zxvf apache-ant-1.8.1-bin.tar.gz

   [root@localhost~]# mv apache-ant-1.8.1   ant     

 

2、配置环境变量  ANT_HOME,测试ant运行情况。

  [root@localhost~]#  vi ~/.bash_profile

  export ANT_HOME=/usr/local/ant 

  [root@localhost~]# source ~/.bash_profile

  [root@localhost~]# cd /usr/bin

  [root@localhost~]# ln -s -f /usr/local/ant/bin/ant

  

  运行ant -version,输出如下内容:

  [root@localhost ~]# ant -version

  Apache Ant version 1.8.1 compiled on April 30 2010

  ok,ant配置完成。

     

3、编写build.xml脚本,关键之处。如下为一个build.xml的通用示例配置

    build.xml 配置文件需要放到项目的同级路径下

   [root@localhost ~]# ls 

   build.xml        src      WebRoot 

  [root@localhost ~]# cat  build.xml

##########################################################

<?xml version=1.0 encoding=utf-8?>    

<!-- zhangkai@cairenhui.com  2011.9.14 -->        

<project name=CRH default=all basedir=.>

    <property environment=env/>

    <property name=java.home value=${env.JAVA_HOME}/>

    <property name=tomcat.home value=${env.TOMCAT_HOME} />

 

    <property name=build.dir value=${basedir}/build/>

    <property name=src value=${basedir}/src/>

    <property name=build.webinf value=${basedir}/build/WEB-INF/>

    <property name=build.weblib value=${basedir}/build/WEB-INF/lib/>

    <property name=build.metainf value=${basedir}/build/META-INF/>

    <property name=build.dest value=${basedir}/build/WEB-INF/classes/> 

    <property name=deploye.dest value=/var/Ant/deploy/>

    <property name=AppName value=CairhEshop/>

    

    <property name=ant.home value=${env.ANT_HOME} />

    <property name=urlRepos value=http://192.168.1.212/svn/Cairh_Eshop/Test_Release_Source/${AppName} />

    <property name=work.space value=/var/Ant/SourceCode/${AppName} />

  

   <!--编译java 需要的classpath库 -->    

      <path id=compile.classpath>

        <fileset dir=${build.weblib} includes=*.jar />

        <fileset dir=${tomcat.home}/lib  includes=*.jar />

        <fileset dir=${java.home}/lib   includes=*.jar /> 

      </path>

  

     <!--antsvn 需要的运行库 --> 

     <!-- 这里要下载 svnant的依赖包共三个 /usr/local/ant/svnant/  目录下,可以自定义存放目录-->

  <path id=svnant.lib>  

      <fileset dir=${ant.home}/svnant> 

                     <include name=*.jar /> 

           </fileset> 

     </path> 

    

    <!-- load the svn task -->

    <taskdef name=svn classname=org.tigris.subversion.svnant.SvnTask classpathref=svnant.lib />

 

    <!--svn check out program-->

    <target name=svn>

        <mkdir dir=${work.space}/>

        <svn username=zhangkai password=password javahl=false>

            <checkout url=${urlRepos} destPath=${work.space} />

        </svn>

    </target>

    

    <!--项目编译初始化临时目录 --> 

    <target name=init>

        <tstamp/>

        <mkdir dir=${build.dir}/>

        <mkdir dir=${build.webinf}/>

        <mkdir dir=${build.weblib}/>

        <mkdir dir=${build.metainf}/>

        <mkdir dir=${build.dest}/>

        <copy todir=${build.dir}>

            <fileset dir=${basedir}/WebRoot>

                <include name=**/>

            </fileset>

        </copy>

 

       <copy todir=${build.dest}>

            <fileset dir=${basedir}/config>

                <include name=**/>

            </fileset>

       </copy>

 

    </target>

 

    <!--开始编译项目 --> 

    <target name=compile depends=init>

        <javac srcdir=${src} destdir=${build.dest}   includeantruntime=on>

     <classpath refid=compile.classpath/> 

        </javac>   

    </target>

      

    <!--发布编译完成的项目 -->    

    <target name=deploy depends=compile>

      <property name=deploy.dir value=${deploye.dest}/${AppName}/ROOT/>

      <property name=deploy.back.dir value=${deploye.dest}/${AppName}/${DSTAMP}${TSTAMP}/>

      <copy todir=${build.dest}>

            <fileset dir=${src}>

                <include name=**/*.xml/>

            </fileset>

      </copy>

      <copy todir=${deploy.dir}>

            <fileset dir=${build.dir}>

                <include name=**/>

            </fileset>

      </copy>

      <copy todir=${deploy.back.dir}>

            <fileset dir=${build.dir}>

                <include name=**/>

            </fileset>

      </copy>

    </target>

 

    <!--清除编译项目时创建的临时文件夹--> 

    <target name=clean depends=init>

        <delete dir=${build.dir}/>  

    </target>

 

    <!--按顺序检出、编译、发布、清理--> 

    <target name=all depends=svn,deploy,clean

           description=deploys the project to tomcat and cleans the build files./>

</project>

##########################################################

 

2011.9.13补充, 实践应用脚本

2011.9.14 修改调整

[root@test214 Ant]# cat Ant_CairhEshop.sh 

#!/bin/bash

# this script is ant and rsync

# created by zhangkai @ cairenhui.com 2011.09.14

###################### section ant  ########################

echo -n Do you want to ant compie ....[Y/N]?

read var1

case $var1 in

[yY])

cd ./SourceCode/CairhEshop    ant

;;

[nN]) ;;

*) ;;

esac

######################## section rsync #####################

echo -n Do you want rsync ....[Y/N]?

read var2

case $var2 in

[yY] )

rsync -vzrtopgl --progress  --exclude=*.svn  --exclude=*.bak  --exclude=uploader-config.properties  --password-file=/etc/rsyncd.pwd   /var/Ant/deploy/CairhEshop/ROOT/*      sysman@192.168.1.215::CairhEshop/

;;

[nN] ) exit 0  ;;

* ) echo Input error ! Pleses enter Y/N ;;

esac

exit 0

       
打赏