Ant学习小结

博客围绕Java开发展开,涉及Ant构建工具以及Javadoc任务。Ant可助力Java项目构建,Javadoc能生成文档。还提及了jar相关内容,这些信息技术在Java开发中具有重要作用。
Ant学习小结
ximazi 原创  (参与分:1521,专家分:100)   发表:2005-09-06 14:56   版本:1.0   阅读:477

首先介绍一下Ant.Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。得益于Java的跨平台性,Ant也是一个跨平台的工具。
1。Ant详细介绍请参考http://ant.apache.org/
2。Ant的下载,http://jakarta.apache.org/builds/jakarta-ant/release
3。Ant的安装,针对Win32 ,请下载ant的apache-ant-1.6.5-bin.zip。将Ant解压缩到C:/,解压缩完毕后,默认的文件夹名为apache-ant-1.6.5,重新命名为Ant。
4。Ant的配置,在系统的高级里面配置环境变量。用户变量 里增加 ANT_HOME = C:/Ant; 系统变量的 Path 里面增加这样一句 C:/Ant/Bin。这样配置完成后,注销用户重新登录后,Ant就可以使用了。
5。Ant的使用,首先介绍一下Ant的基本用途,Ant可以用来编译Java文件、打包Jar,War、生成Javadoc等。
我现在就具体介绍一下自己学习使用Ant的过程。首先使用Ant就是想要使得编译自己的java程序不再是那么缓慢,不需要使用Eclipse,节省一下不多的内存。那么就先拿一个十分简单的测试项目来试验一下。要使得Ant运行,就要编写build.xml。build.xml要放置于你项目的根目录下。由于执行Ant是这样一个流程,你cmd进入命令行界面,到你的项目根目录下,输入ant,此时ant就会在根目录下寻找build.xml,找到build.xml后根据配置执行任务。那么最重要的工作就是Ant的build.xml的编写。
    build.xml设置了一系列任务,即target。
    例子:<target name="init">
          </target>
target按照习惯一般分为几种:
1 usage 打印本脚本的帮助信息(缺省)
2 init 初始化信息,变量等
3 build 编译
4 javadoc 生成javaAPI 文档
5 jar 将生成文件打包Jar
6 clean 清除过程文件、目录
7 all 全部任务执行
从最简单的只执行一个target开始,就是build,这个是我最想用的任务。
以例子开始说:
<?xml version="1.0"?>
<project default="build" basedir="."> 
   <property name="appname" value="jspsmartupload" />
   <property name="src" value="src" />
   <property name="build" value="WEB-INF/classes" />
   <property name="myclasspath" value="${base}/WEB-INF/lib" />    
   <target name="build">
       <mkdir dir="${build}" />
       <javac srcdir="${src}" destdir="${build}">
           <include name="**/*.java" />          
       </javac>
   </target>
</project>
    这个build.xml是一个简单项目的Ant脚本是我最开始写的,中间有许多错误。在这个build.xml中 <project default="build" basedir="."> 含义是,默认执行任务为build,根目录为当前目录。<property name="src" value="src" />是定义一些路径变量给后面使用。
<target name="build">
       <mkdir dir="${build}" />
       <javac srcdir="${src}" destdir="${build}">
           <include name="**/*.java" />          
       </javac>
   </target>
这个任务段,就是build任务,首先 mkdir就是创建文件夹,然后进行编译。
但是在写完运行Ant的时候出错了。
    为什么会出错,原因是没有引入classpath,修改Ant如下:
<?xml version="1.0"?>
<project default="build" basedir="."> 
   <property name="appname" value="jspsmartupload" />
   <property name="src" value="src" />
   <property name="build" value="WEB-INF/classes" />
   <property name="myclasspath" value="${base}/WEB-INF/lib" />    
   <target name="build">
       <mkdir dir="${build}" />
       <javac srcdir="${src}" destdir="${build}">
           <include name="**/*.java" />    
            <classpath>
                  <pathelement path="${myclasspath}"/>
                  <fileset dir="./WEB-INF/lib"><include name="**/*.jar"/></fileset>
                  <pathelement location="classes"/>
             </classpath>      
       </javac>
   </target>
</project>
再次运行Ant,成功。
    现在要来更加复杂一些的尝试了。
    现在,我们在一个ant项目中使用更多的target,为更复杂的项目执行编译,打包和生成javadoc文档的工作。
    还是用例子来说明:
<project default="all" basedir=".">
  <!-- =================================================================== -->
  <!-- Initialization target                                               -->
  <!-- =================================================================== -->
  <target name="init">
    <tstamp/>
    <property file="${basedir}/build.properties" />
    <property name="Name" value="Ant_All_Test"/>
    <property name="name" value="project_name"/>
    <property name="version" value="0.1"/>
    <property name="year" value="2005"/>
    <echo message="----------- ${Name} ${version} [${year}] ------------"/>
    <property name="debug" value="off"/>
    <property name="optimize" value="on"/>
    <property name="deprecation" value="on"/>
    <property name="src" value="./src"/>
    <property name="lib" value="./lib"/>
    <property name="build.src" value="./web/WEB-INF/src"/>
    <property name="build" value="./web/WEB-INF/classes"/>
    <property name="javadocs" value="./doc"/>
    <property name="packages" value="com.xxxxxxxx.*"/>
    <path id="classpath">
        <pathelement path="${jsdk_jar}"/>
        <fileset dir="${lib}">
           <include name="**/*.jar"/>
        </fileset>
    </path>    
    <filter token="year" value="${year}"/>
    <filter token="version" value="${version}"/>
    <filter token="date" value="${TODAY}"/>
    <filter token="log" value="true"/>
    <filter token="verbose" value="true"/>
  </target>
  <!-- =================================================================== -->
  <!-- Help on usage                                                       -->
  <!-- =================================================================== -->
  <target name="usage" depends="init">
    <echo message="${Name} Build file"/>
    <echo message="-------------------------------------------------------------"/>
    <echo message=""/>
    <echo message=" available targets are:"/>
    <echo message=""/>
    <echo message="   jar      --> generates the ${name}.jar file"/>
    <echo message="   build    --> compiles the source code"/>
    <echo message="   javadoc  --> generates the API documentation"/>
    <echo message="   clean    --> cleans up the directory"/>
    <echo message=""/>
    <echo message=" Please rename build.properties.default to build.properties"/>
    <echo message=" and edit build.properties to specify JSDK 2.3 classpath."/>
    <echo message=""/>
    <echo message=" See the comments inside the build.xml file for more details."/>
    <echo message="-------------------------------------------------------------"/>
    <echo message=""/>
    <echo message=""/>
  </target>
  <!-- =================================================================== -->
  <!-- Prepares the source code                                            -->
  <!-- =================================================================== -->
  <target name="prepare-src" depends="init">
    <!-- create directories -->
    <mkdir dir="${build.src}"/>
    <mkdir dir="${build}"/>
    
    <!-- copy src files -->
    <copy todir="${build.src}">
      <fileset dir="${src}"/>
    </copy>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the source directory                                       -->
  <!-- =================================================================== -->
  <target name="build" depends="prepare-src">
    <javac srcdir="${build.src}"
           destdir="${build}"
           debug="${debug}"
           optimize="${optimize}">
      <classpath refid="classpath"/>
    </javac>
  </target>
  <!-- =================================================================== -->
  <!-- Creates the class package                                           -->
  <!-- =================================================================== -->
 <!--  <target name="jar" depends="build">
    <jar jarfile="${lib}/${name}.jar"
         basedir="${build}"
         includes="**"/>
  </target> -->
  <!-- =================================================================== -->
  <!-- Creates the API documentation                                       -->
  <!-- =================================================================== -->
  <target name="javadoc" depends="build">
    <mkdir dir="${javadocs}"/>
    <javadoc packagenames="${packages}"
             sourcepath="${build.src}"
             destdir="${javadocs}"
             author="true"
             version="true"
             use="true"
             splitindex="true"
             windowtitle="${Name} API"
             doctitle="${Name}">
      <classpath refid="classpath"/>
    </javadoc>
  </target>
  <target name="all" 
          depends="usage,init,prepare-src,build,javadoc" 
          description="make all task." />
  
</project>
<!-- End of file -->
    从脚本开头我们看到<project default="all" basedir=".">,表明项目默认target是all。那么我们找到<target name="all" depends="usage,init,prepare-src,build,javadoc" description="make all task." />;这个target depends="usage,init,prepare-src,build,javadoc"这个就是调用了其他各个target任务。其他各个任务依次进行。执行ant后成功执行各个操作,顺利完成编译和javadoc生成。经过自己的尝试和学习又有了新的收获,感觉很好。希望大家都能多动手,这样新知识自然融会贯通。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值