ant学习

Ant是一种基于Java(跨平台)的打包工具,它能实现项目的自动构建和部署等功能。

一、ant常用元素介绍:

1、project元素

    该元素项目的顶级元素,一个build.xml文件至少应该包含一个project元素。属性如下:

    name:该project节点名称

    default:默认执行的target元素节点名称

    basedir:用于指定基路径的位置。项目根节点,一般为“.”。

例子:定义project文件的文件名为antproject,默认执行的target名称为jar

<project name="antproject" basedir="." default="jar"></project>
2、property元素
    该元素以键值对形式定义公共常量,属性如下:

    name:常量名称

    value:常量值

    location:同value类似。

    file:定义引入的配置文件

例子:引入配置文件build.properties,定义srcDir常量对应的值为src,buildDir常量对应的值为build

<property file="build.properties" />
<property name="srcDir" location="src" />
<property name="buildDir" value="build" />

注:另外Ant提供了一些它自己的内置属性,如下:

basedirproject基目录的绝对路径

ant.versionAnt的版本

ant.project.name:当前指定的project的名字

ant.java.versionAnt检测到的JDK的版本

3、target元素

    该元素用于定义需要执行的任务,即从对应target开始执行需要的任务。同一个project下可包含多个target节点。主要属性:

    name:该任务的名称,project元素中的default就是填写此处的name

    depends:可选,指定target的依赖关系,即开始执行该target时要先执行的target。

    if:用于判断后面描述的属性是否存在,存在才会执行该target

    unless:与if相反,之后描述的属性不存在才执行该target

    description:对target进行说明

例子:定义名为compile的target,执行前先执行名为init的target,同时需要保证 srcDir常量存在才执行
<target name="compile" depends="init" if="srcDir">
    <description>im a description message</description>
    <javac srcdir="${srcDir}" destdir="${buildDir}">
    </javac>
</target>

4、fileset元素

    一般配合include和exclude来描述一个目录中需要的文件以及过滤的文件。主要属性:

    dir:指定源文件路径

    include:描述fileset包含源文件路径下哪些文件

    exclude:描述fileset不包含源文件路径下哪些文件

例子:选择当前路径下所有.jar结尾的文件

<fileset dir=".">
      <include name="*.jar" />
</fileset>

5、mkdir元素

    该元素用于创建文件夹,主要属性:

    dir:需要创建的目录

例子:创建一个classes目录

<target name="init">
    <mkdir dir="classes" />
</target>
6、delete元素
    该元素用于删除指定路径,主要属性:
    file:指定删除的对应文件
    dir:指定删除的目录
    includeEmptyDirs:为true则删除空目录

例子:

删除index.jsp文件:

 <delete file="index.jsp" />

删除classes目录:

<delete dir="classes" />

删除所有的备份目录或空目录:

<delete includeEmptyDirs="true">
      <fileset dir="." includes="**/*.bak"/>
</delete>
7、copy元素
    该元素 用于复制文件 ,主要属性:

    file:源文件

    todir:复制的目标路径

    tofile:复制的目标文件

例子:

复制单个文件:

 <copy file="file.txt" tofile="copy.txt"/>

对文件目录进行复制:

<copy todir="newdir">
       <fileset dir="classes"/>
</copy>

将文件复制到另外的目录:

<copy file="file.txt" todir="classes"/>
8、move元素

    该元素用于移动文件,主要属性:

    file:源文件

    todir:复制的目标路径

    tofile:复制的目标文件

例子:

移动单个文件为newfile文件:

<move file="fromfile" tofile="newfile"/>

移动单个文件到bin目录: 

<move file="fromfile" todir="bin"/>

移动olddir目录到newdir目录:

<move todir="newdir">
    <fileset dir="olddir"/>
</move>

9、echo元素

  该元素的作用是根据日志或监控器的级别输出信息。它包括messagefileappendlevel四个属性,举例如下:

<echo message="Hello,Amigo" file="logs/system.log" append="true">

10、Javac元素

    该元素用于编译Java源文件,其主要属性:

    srcdir:表示源文件位置

    destdir:编译后文件存放位置

    encoding:指定编码格式

    classpath:指定lib位置

    debug:是否输出调试信息,为boolean值

例子:

<target name="compile" depends="init">
   <mkdir dir="build" />
   <javac debug="true"
          destdir="build"
          deprecation="javac the src"
          source="1.8" target="1.8" encoding="UTF-8">
     <src path="src" />
   </javac>
</target>

11、jar元素

    该元素用于将指定文件或文件夹的内容进行打包,打jar包,主要属性:

    jarfile:指定生产jar文件路径及名称

    basedir:指定源文件位置

    其下有一个子节点manifest,用于指定最后生成jar包中manifest.mf文件的内容

    如下指定jar包的主方法(入口): <property name=”Main-Class”value=“xxxx.xxx.xxx.Xxxx”/>

例子:

<target name="jar">
   <jar destfile="test/package.jar" basedir="build">
      <!-- 创建清单 user.name 为计算机当前登录用户名-->
      <manifest>
       <attribute name="Built-By" value="${user.name}" />
       <attribute name="Main-Class" value="test.First" />
      </manifest>
   </jar>
   <jar destfile="test/package-src.jar" basedir="src" />
</target>
12、war元素
    该元素用于将指定文件打成一个war包,属性:
    destfile:打包之后文件存放位置
    basedir:指定源文件位置
    needxmlfile:指定是否需要web.xml文件
    webxml:指定web.xml文件位置
例子:
<target name="war" depends="compile">
        <war destfile="warpath" webxml="WebContent/WEB-INF/web.xml" basedir=".">
        </war>
</target>

13、zip元素

    该元素用于将指定文件打成一个zip包,属性如下:

    destfile:打包之后文件存放位置

    basedir:指定源文件位置
例子:
<target name="zip" >  
       <zip destfile="zippath" basedir="."></zip>  
</target> 

二、实例

1、在eclipse构建一个java项目,其中src中用于放项目源码,在src下构建一个test包,然后新建一个First.java类,内容如下:


在src文件夹同一层目录上创建一个build.xml及build.properties配置文件,项目如下:


2、编写build.properties配置文件如下:


3、编写build.xml文件的内容,如下:

<?xml version="1.0" encoding="UTF-8"?>

<!--定义project文件的文件名与默认执行目标-->
<project name="antproject" basedir="." default="jar">

<!--添加描述-->
<description>A simple Java project</description>

<!--添加属性,相当于文件级的全局变量-->
<property file="build.properties" />
<property name="srcDir" value="src" />
<property name="buildDir" value="build" />
<property name="distDir" value="dist" />
<property name="debug" value="true" />
<property name="jarpath" location="./build/jar"/>  
<property name="warpath" location="./build/war"/>  
<property name="zippath" location="./build/zip"/>  
<property name="javadoc" location="./build/doc"/>  
<!-- 如果有额外的jar包,可以再这里指定,再下面的classpath处进行引用  
<path id="classpath">  
    <pathelement path="your jar jar file path"/>  
</path>   
定义之后在javac中添加,可看后面的javac中的注释-->  

<!--创建目标clean,用于清空build与dist目录-->
<target name="clean" if="ant.java.version">
	<delete dir="${buildDir}" />
	<delete dir="${distDir}" />
	<!--用于打印输出-->
	<echo message="version is ${ant.java.version}"></echo>  
</target>

<!--初始化,创建文件夹,用于放置操作之后的文件-->
<target name="init">
	<mkdir dir="${buildDir}" />
	<mkdir dir="${distDir}" />
    <mkdir dir="${jarpath}"/>  
    <mkdir dir="${warpath}"/>  
    <mkdir dir="${zippath}"/>  
    <mkdir dir="${javadoc}"/>  
</target>

<!--编译,srcdir指明源文件目录,destdir指编译好后放在哪里。-->
<!--denpends="init" 表示要先运行init这个target-->
<target name="compile" depends="init">
	<javac srcdir="${srcDir}" destdir="${buildDir}">
    <!-- 
         <classpath refid="classpath"/> 
    -->  
	</javac>
</target>

<!-- 生成javadoc文档 -->  
<target name="javadoc" depends="init">  
    <javadoc sourcepath="${srcDir}" destdir="${javadoc}" encoding="utf-8" charset="gb2312">  
    </javadoc>  
</target>  

<!--运行命令其实就是Java的命令。这里指明要运行的类为test包下的First类,classpath指出编译文件位置-->
<target name="run" depends="compile">
	<java classname="test.First" classpath="${buildDir}" />
</target>

<!-- buildDir常量不存在时执行该target打印信息 -->  
<target name="testunless" unless="buildDir">
	<echo message="test the unless"></echo>
</target>

<!--将build文件夹下的.class编译文件打成jar包之后放到dist,命名为package.jar;将src中的源码达成名字为package-src.jar的jar包-->
<target name="jar" depends="compile">
   <jar destfile="${distDir}/package.jar" basedir="${buildDir}">
	  <!-- 创建清单 , user.name 为计算机当前登录用户名-->
	  <manifest>
	   <attribute name="Built-By" value="${user.name}" />
	   <attribute name="Main-Class" value="test.First" />
	  </manifest>
   </jar>
   <jar destfile="${distDir}/package-src.jar" basedir="${srcDir}" />
</target>

<!-- 打war包 ,因为不是web工程,没有WEB-INFO/web.xml文件,添加属性needxmlfile=false即可 -->  
<target name="war" depends="compile">  
    <war destfile="${warpath}" basedir="${buildDir}" needxmlfile="false"></war>  
</target>  
<!--   
<target name="war1" depends="compile">
	<war destfile="${warpath}" webxml="WebContent/WEB-INF/web.xml">
		拷贝webroot下除了web-inf和meta-inf的两个文件夹
		<fileset dir="WebContent" includes="**/*.jsp" />
		拷贝lib下的jar
		<lib dir="${lib}" />
		拷贝build/classes下的.class文件
 	<classes dir="${classes}" />
	</war>
</target>
-->     
  
<!-- 将整个工程打成一个zip压缩包 -->  
	<target name="zip" depends="javadoc,jar,war">  
    <zip destfile="${zippath}" basedir="."></zip>  
</target>  

</project>

4.执行打包方式:

(1)可以在控制台进入对应项目目录,然后使用  ant+target名  的方式执行对应的target任务,如果只是执行ant命令则默认会执行project中default对应的target

(2)在eclipse上 window -> show view -> ant 调出ant的窗口,然后就可以选择对应的target进行执行

执行完对应的任务,刷新项目则可看到生成的包



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值