我的第一个ant应用

本文介绍了一个使用Ant构建工具的实际案例,包括支持SVN更新、项目打包及发布到Tomcat服务器等流程。文章还解决了字符编码问题,并详细介绍了如何配置classpath、生成时间戳以及使用SVN支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?xml version="1.0" encoding="UTF-8" ?>
<project name="ecp-oracle" basedir="." default="copyProjectToTomcat">
<property name="src" value="src"/>
<property name="dest" value="web/WEB-INF/classes"/>
<property name="build" value="../build"/>
<property name="project" value="ecp-oracle"/>

<property name="tomcat.webapp.dir" value="F:/apache-tomcat-6.0.29/webapps"/>
<property name="tomcat.project" value="*.war"/>
<property name="tomcat.dir" value="F:/apache-tomcat-6.0.29"/>

<!--  指定编译所依赖的jar-->

<path id="project.classpath">
 <fileset dir="web/WEB-INF/lib">
        <include name="*.jar"/>
     </fileset>
  </path>
<target name="init">
<tstamp/><!-- 生成时间戳 -->
<delete dir="${dest}" />
<mkdir dir="${dest}" />
<delete dir="${build}" />
<mkdir dir="${build}" />

<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpath="svnant.jar"/><!-- 使用svn的支持 这里就要求svnant.jar在系统classpath中  -->
</target>
<target name="copy" depends="init">
 <copy todir="${dest}">
  <fileset dir="src/conf/"/>
 </copy>

<!--  svn更新代码 -->
<target name="update" depends="init">
        <svn username="pengch" password="123456">
            <update dir="../${project}"/>
        </svn>
</target>
</target>
<target name="compile" depends="copy">
  <javac srcdir="${src}" destdir="${dest}" encoding="UTF-8">
  <classpath refid="project.classpath"/>
  </javac>
</target>
<target name="copy2" depends="compile">
 <copy todir="${build}">
  <fileset dir="web/"/>
 </copy>
</target>
<target name="build" depends="copy2">
 <jar jarfile="${project}-${DSTAMP}.war" basedir="${build}"/>
</target>
<target name="clean" depends="build">
 <delete dir="${dest}"/>
 <delete dir="${build}"/>
</target>

<!-- 拷贝项目到tomcat的webapps中 -->
    <target name="copyProjectToTomcat" depends="clean">
        <delete dir="${tomcat.webapp.dir}/${tomcat.project}" />
        <copy todir="${tomcat.webapp.dir}/" file="${project}-${DSTAMP}.war"/>
    </target>

<!-- 停止tomcat -->
    <target name="stopTomcat">
        <exec dir="${tomcat.dir}/bin" executable="cmd.exe" os="Windows XP">
            <arg line="/c shutdown.bat" />
        </exec>
    </target>

    <!-- 启动tomcat -->
    <target name="startTomcat">
        <exec dir="${tomcat.dir}/bin" executable="cmd.exe" os="Windows XP">
            <arg line="/c startup.bat" />
        </exec>
    </target>

</project>

 

通过网上的资料以及自己的测试实践做出的第一个ant应用,这个应用的作用主要是完成支持svn更新项目、项目的打包及发布到tomcat服务器部署运行。

关于其每一句的详情解析在这就不废话了,因为之前转载了一篇适合初学者的ant实例有对每一句的详情讲解,在这就记录下我一步步下来遇到的一些问题及解决(注:我的项目是java project):

 

1、字符编码问题:javac编译时报“GBK不可映射字符”和“非法字符/65279”错误

     GBK不可映射字符:<javac srcdir="${src}" destdir="${dest}" encoding="UTF-8">  在此指定字符编码为“UTF-8”即可

     非法字符/65279:用editplus打开所报文件 Document--File Encoding--Change File Encoding 此亦可选择多文件字符编码更改File Encoding Multiple修改为“UTF-8”保存即可

 

2、用ant编译时指定读取需要的项目lib下的jar包,所以需要配置classpath指定jar包的路径

     设置classpath的方法有多种
<path id="project.classpath">
    1<pathelement path="${basedir}/lib/aa.jar"/>
    2<pathelement location="aa.jar"/>与1的区别在于location可以去当前路径,当然可以使用绝对路径
    3<filelist id="file" dir="${basedir}/lin">
          <file name="a.jar"/>
          <file name="d:lib/b.jar"/>
     </filelist>
    4<fileset dir="d:/lib">
        <include name="**/*.jar"/>
     </fileset> 
   </path>   
下面说classpath的使用
   样例如下
     <javac scdir="./src" destdir="./classes">
           <classpath refid="project.classpath"/> 
   </javac>


下面是比较四种方式的优缺点
   第一种调用的需要设置绝对路径适合第三方jar包 
   第二种则适合jar包和build.xml文件在同一目录下的情况,但是我觉得两个文件放在一起本身就不合理,估计是用的情况不多。
前两个都是设置单个jar包 
  第三种是一个文件集合适合引入不同路径的jar包,但是需要输入每个jar包的名字,比较繁琐,适合于jar包属于不同位置,比较分散但是不多的情况
  第四种是一个文件夹,可以采用匹配模式来引入,这个适合在同一个文件夹下,文件名字比较多的情况下

 

 

3、打war包时追加当前时间命名文件( 生成时间戳):

     这种需要是通过简单但是非常有用的 tstamp 任务来解决的。这个任务通常在某次生成过程开始时调用,比如在一个 init 目标中。这个任务不需要属性,许多情况下只需 <tstamp/> 就足够了。

tstamp 设置的属性:

           属性                                         说明                                             例子
        DSTAMP               设置为当前日期,默认格式为yyyymmdd              20031217
        TSTAMP                   设置为当前时间,默认格式为hhmm                     1603
         TODAY                       设置为当前日期,带完整的月份                  2003年12月17日
 

将JAR文件将命名为package-20031217.jar

<jar destfile="package-${DSTAMP}.jar" basedir="classes"/>
 

还可以配置 tstamp 任务来设置不同的属性,应用一个当前时间之前或之后的时间偏移,或以不同的方式格式化该字符串。所有这些都是使用一个嵌套的 format 元素来完成的,如下所示:

<tstamp>

   <format property="OFFSET_TIME"

           pattern="HH:mm:ss"

           offset="10" unit="minute"/>

</tstamp>
 

上面的清单将OFFSET_TIME 属性设置为距离当前时间 10分钟之后的小时数、分钟数和秒数。

用于定义格式字符串的字符与 java.text.SimpleDateFormat 类所定义的那些格式字符相同。

 

4、使用svn的支持:

    

    1>、ant本身需要svnant任务插件支持,才能在ant脚本中获取svn中的内容,svnant是subclipse的组件之一,它的URL 是:

       http://subclipse.tigris.org/svnant.html

    2>、使用前需要将它依赖的类库放在ant安装目录下面的lib目录;

    3>、要想使用svnant中的任务访问svn的话,首先要定义新的task:

     <typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpath="svnant.jar" />   <!-- 这里就要求svnant.jar在系统classpath中  -->

 

5、最后就是启动tomcat及停止tomcat.  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值