ant编译打包

最近花了点时间学习使用ant这个工具,虽然平时经常用ant脚本来构建war包,不过都是别人写好的,所以感觉自己还是有必要简单学习一下这个工具的。下面这个ant脚本是我自己写来用来打包最近在做的一个项目。过程中遇到一些问题,在此记录一下。

<?xml version="1.0"  encoding="GB2312" ?>
    <project name="cdaOtherService" default="Build" basedir=".">  
        <!-- 设置属性,方便下面使用 -->
        <property name="lib.dir" location="WebContent/WEB-INF/lib" /> 
        <property name="src" value="src"/>  
        <property name="resources" value="resources"/>
        <property name="build.allclass" value="ant/allclass"/>
        <property name="build.lib" value="ant/jar"/>
        <property name="build.webapp" value="ant/webapp"/>
        <property name="build.jar" value="ant/jar/test.jar"/> 

        <!-- 指定项目依赖的第三方jar包-->
        <path id="classpath">
            <fileset dir="${lib.dir}">
                <include name="**/*.jar" />
            </fileset>
        </path>

        <!-- 创建编译过程中存放jar包及class文件的目录 -->
        <target name="create-path">  
            <mkdir dir="${build.allclass}"/>  
            <mkdir dir="${build.lib}"/>  
            <mkdir dir="${build.webapp}"/> 
            <mkdir dir="${build.webapp}/WEB-INF/classes" />
        </target>  

        <!-- 编译 -->
        <!-- fork="true" executable="E:\jdk\jdk\bin\javac"  指定使用哪个jdk版本编译  也可以用target="1.7"来指定jdk版本,只是这个方法没有前面一个灵活-->
        <target name="create-class">  
            <javac  destdir="${build.allclass}" includeantruntime="on" fork="true" executable="E:\jdk\jdk\bin\javac"> 
                 <src path="${src}" />  
                 <src path="${resources}" />
                 <compilerarg value="-Xlint:unchecked"/>
                 <compilerarg value="-Xlint:deprecation"/>
                 <compilerarg line="-encoding UTF-8 "/>   
                 <classpath refid="classpath" />  
            </javac>

            <!-- 把WebContent下的所有文件(除了.svn,**/**.svn文件)复制到ant/webapp -->
            <copy todir="${build.webapp}">  
                 <fileset dir="WebContent" includes="**" excludes=".svn,**/**.svn">  
                 </fileset>  
            </copy>

            <!-- 把resources下的所有文件(除了.svn,**/**.svn文件)复制到ant/allclass -->
            <copy todir="${build.allclass}">  
                    <fileset dir="resources" includes="**" excludes=".svn,**/**.svn">  
                    </fileset>  
            </copy>

            <!-- 把allclass下的所有文件复制到ant/webapp/WEB-INF/classes下 -->
            <copy todir="${build.webapp}/WEB-INF/classes">  
                            <fileset dir="${build.allclass}"/> 
                </copy> 
        </target>  

        <!-- 把allclass下的所有文件打包成jar包 -->
        <target name="create-jar">  
            <jar destfile="${build.jar}" basedir="${build.allclass}">  
               <manifest>  
                  <attribute name="Main-Class" value="test"/>  
               </manifest>  
            </jar>  
        </target>  

        <!-- 把ant/webapp下的所有文件打包成cdaOtherService.war包 -->
        <target name="makeWar" depends="create-path,create-class,create-jar">
                <war warfile="ant/cdaOtherService.war">
                    <fileset dir="${build.webapp}" />
                </war>
        </target>

        <!-- 删除生成的class文件 -->
         <target name="clean" depends="makeWar">  
                <delete dir="${build.allclass}"/> 
                <delete dir="${build.webapp}"/>  
         </target>  

        <target name="Build" depends="makeWar,clean">
                <echo message="Ant is building the project.create ok" />
        </target>
    </project>  

这里写图片描述

进入到项目根目录后:输入ant回车
控制台报找不到servlet-api.jar这个包里面的类,所以需要去tomcat目录的lib路径下找到这个包,并把它拷贝到项目里WebContent/WEB-INF/lib路径下。由于这个项目不是maven项目,而是一个普通的web项目。目录结构如下这里写图片描述
找到servlet-api.jar这个包
这里写图片描述
放到下面的lib路径下
这里写图片描述
最后经过编译、打包成war包。

在学习的过程中碰到了字符编码异常的问题,可以通过使用

<compilerarg line="-encoding UTF-8 "/>   

解决。

如果用高版本jdk编译会导致生成的war包无法在低jdk版本下运行。有两种方法解决这个问题。

一、

 <javac  destdir="${build.allclass}" includeantruntime="on" target="1.7"> 
                 <src path="${src}" />  
                 <src path="${resources}" />
                 <compilerarg value="-Xlint:unchecked"/>
                 <compilerarg value="-Xlint:deprecation"/>
                 <compilerarg line="-encoding UTF-8 "/>   
                 <classpath refid="classpath" />  
            </javac>

二、

   <javac  destdir="${build.allclass}" includeantruntime="on" fork="true" executable="E:\jdk\jdk\bin\javac"> 
                 <src path="${src}" />  
                 <src path="${resources}" />
                 <compilerarg value="-Xlint:unchecked"/>
                 <compilerarg value="-Xlint:deprecation"/>
                 <compilerarg line="-encoding UTF-8 "/>   
                 <classpath refid="classpath" />  
   </javac>

在这里推荐使用第二种方式,这个更灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值