ant 工程打包

1、下载安装ant,配置环境变量;添加变量ANT_HOME,变量值为ant软件根目录213404_XZ8s_2303275.png

213553_buT5_2303275.png

2、进入cmd ,输入ant ,输出如下图表明安装成功。

213715_W3jm_2303275.png

3、创建maven 工程

224539_gbKG_2303275.png

4、创建build.xml打包脚本

<?xml version="1.0" ?>
<project name="ant-project" default="print-dir" basedir=".">
    <target name="print-dir">
        <echo message="The base dir is: ${basedir}" />
    </target>
</project>

定义了default 属性的值为print-dir,即当运行ant 命令时,如果没有指明执行的target,则将执行默认的target(print-dir)。此外,还定义了basedir 属性的值为 “.” ,.表示当前目录,进入当前目录后运行ant 命令,得一下结果:

224734_A2RC_2303275.png

4.1 target节点元素介绍

target为ant的基本执行单元或是任务,它可以包含一个或多个具体的单元/任务。多个target 可以存在相互依赖关系。它有如下属性: 
● name 属性:指定 target 元素的名称,这个属性在一个 project 元素中是唯一的。我们可以通过指定 target 元素的名称来指定某个 target 。 
● depends 属性:用于描述 target 之间的依赖关系,若与多个 target 存在依赖关系时,需要以“,”间隔。 Ant 会依照 depends 属性中 target 出现的顺序依次执行每个 target ,被依赖的target 会先执行。 
● if 属性:用于验证指定的属性是存在,若不存在,所在 target 将不会被执行。 
● unless 属性:该属性的功能与 if 属性的功能正好相反,它也用于验证指定的属性是否存在,若不存在,所在 target 将会被执行。 
● description 属性:该属性是关于 target 功能的简短描述和说明。 

<?xml version="1.0" ?>
<project name="ant-project" default="print-dir" basedir=".">
    <target name="version" if="ant.java.version">
        <echo message="Java Version: ${ant.java.version}" />
    </target>
    <target name="print-dir" depends="version" unless="docs">
        <description>
            a depend example!
        </description>
        <echo message="The base dir is: ${basedir}" />
    </target>
</project>

输出结果:

225717_Q3CY_2303275.png

4.2 property属性节点元素

property元素可看作参量或者参数的定义,project 的属性可以通过 property 元素来设定,也可在 Ant 之外设定。若要在外部引入某文件,例如 build.properties 文件,可以通过如下内容将其引: 
<property file="build.properties"/> 
property 元素可用作 task 的属性值。在 task 中是通过将属性名放在${属性名}之间,并放在 task 属性值的位置来实现的。 
Ant 提供了一些内置的属性,它能得到的系统属性的列表与 Java 文档中 System.getProperties() 方法得到的属性一致,这些系统属性可参考 sun 网站的说明。同时, Ant 还提供了一些它自己的内置属性,如下: 
basedir: project 基目录的绝对路径;   
ant.file: buildfile的绝对路径 
ant.version: Ant 的版本信息
ant.project.name: 当前指定的project的名字,即前文说到的project的name属性值; 
ant.java.version: Ant 检测到的JDK版本

<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
    <property name="name" value="oyc" />
    <property name="age" value="25" />
    <target name="example">
        <echo message="name: ${name}, age: ${age}" />
    </target>
</project>

输出结果:

230232_ADMB_2303275.png

4.3 copy命令

copy主要用来对文件和目录的复制功能

<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
    <target name="example">
        <copy file="pom.xml" tofile="pom.bak"/>
        <copy todir="src.bak"> <fileset dir="src"/> </copy>
        <copy file="pom.xml" todir="D:/"/>
        <echo message="copy file success" />
    </target>
</project>

执行结果:

230936_A3by_2303275.png

4.4 delete命令

对文件或目录进行删除,举例如下:

<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
    <target name="example">
        <copy file="pom.xml" tofile="pom.bak"/>
        <copy todir="src.bak"> <fileset dir="src"/> </copy>
        <copy file="pom.xml" todir="D:/"/>
        <delete file="pom.bak"/>
        <delete dir="src.bak"/>
        <delete includeEmptyDirs="true"> <fileset dir="." includes="**/*.bak"/> </delete>
        <echo message="copy file success" />
    </target>
</project>

运行结果:

231628_8bc0_2303275.png

4.5  mkdir 命令

创建目录 <mkdir dir="/home/philander/build/classes"/>

4.6 move 命令

移动文件或目录,举例如下:

<move file="sourcefile" tofile=”destfile”/>

移动单个文件到另一个目录:

<move file="sourcefile" todir=”movedir”/>

移动某个目录到另一个目录:

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

4.7 echo命令

该任务的作用是根据日志或监控器的级别输出信息。它包括 message 、 file 、 append 和 level 四个属性,举例如下:

<echo message="ant message" file="/logs/ant.log" append="true">

5  jar 标签节点元素

该标签用来生成一个JAR文件,其属性如下。 
● destfile表示JAR文件名。 
● basedir表示被归档的文件名。 
● includes表示别归档的文件模式。 
● exchudes表示被排除的文件模式。

● compress表示是否压缩。

<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
    <target name="example">
        <property name="name" value="test" />
        <property name="dest" value="src" />
        <jar destfile="${basedir}/${name}.jar" level="9" compress="true" encoding="utf-8" basedir="${basedir}/${dest}"></jar>
    </target>
</project>

运行结果:

232918_9Pux_2303275.png

同样打包操作的的还有war、tgz,已经解压操作uzip

<?xml version="1.0" ?>
<project name="ant-project" default="example" basedir=".">
    <target name="example">
        <property name="name" value="test" />
        <property name="dest" value="src" />
        <property name="file" value="pom.xml" />
        <jar destfile="${basedir}/${name}.jar" level="9" compress="true" encoding="utf-8" basedir="${basedir}/${dest}"></jar>
        <zip basedir="${basedir}/${dest}" zipfile="${basedir}/${dest}.zip"/> 
        <gzip src="${basedir}/${file}" zipfile="${basedir}/${file}.gz"/>
        <!-- 解压zip -->
        <unzip src="output.class.gz" dest="extractDir"/>
        <!-- 建立war包 -->
        <war destfile="${webRoot}/ash.war" basedir="${basedir}/web" webxml="${basedir}/web/WEB-INF/web.xml">
            <exclude name="WEB-INF/classes/**"/>
            <exclude name="WEB-INF/lib/**"/>
            <exclude name="WEB-INF/work/_jsp/**"/>
            <lib dir="${lib.dir}" includes="**/*.jar, **/*.so, **/*.dll">
                <exclude name="${webRoot}\${helloworld_jar}"/>
            </lib>
            <lib file="${webRoot}/${helloworld_jar}"/>
            <classes dir="${dest}" includes="**/*.xml, **/*.properites, **/*.xsd"> </classes>
        </war>
    </target>
</project>

 

 

ant 打包工程:

<path id="buildpath">
    <fileset refid="lib.runtime"/>
    <fileset refid="lib.container"/>
    <fileset refid="lib.extras"/>
</path>
 
<path id="src.paths">
    <fileset id="srcs" dir=".">
        <include name="src/**/*.java"/>
    </fileset>
</path>

 

八、ant编译打包、运行工程

复制代码代码如下:


<?xml version="1.0" encoding="UTF-8"?>
<!-- name是当前工程的名称,default是默认执行的任务,basedir是工作目录(.代表当前根目录) -->
<project name="HelloWorld" default="run" basedir=".">
    <!-- property类似于程序中定义简单的变量 -->
    <property name="src" value="src"/>
    <property name="dest" value="classes"/>
    <property name="hello_jar" value="helloWorld.jar"/>
    <!-- 
    target是一个事件、事情、任务, name是当前事情的名称,depends是依赖的上一件或是多件事情
    如果所依赖的事情没有执行,ant会先运行依赖事情,然后再运行当前事情
    -->
    
    <!-- 初始化 -->
    <target name="init">
        <!-- 建立classes目录 -->
        <mkdir dir="${dest}"/>
        <mkdir dir="temp"/>
        <mkdir dir="temp2"/>
    </target>
    
    <!-- 编译 -->
    <target name="compile" depends="init">
        <javac srcdir="${src}" destdir="${dest}"/>
        <!-- 设置jvm内存
        <javac srcdir="src" fork="true"/> 
        <javac srcdir="src" fork="true" executable="d:\sdk141\bin\javac" 
        memoryMaximumSize="128m"/> 
        -->
    </target>
    
    <!-- 建立jar包 -->
    <target name="build" depends="compile">
        <!-- 
        <jar jarfile="${hello_jar}" basedir="${dest}"/>
        创建一个名称是package.jar文件
        <jar destfile="package.jar" basedir="classes"/> 
        -->
        <jar destfile="${hello_jar}" basedir="classes"> 
            <!-- 向jar包中的main文件中添加内容 -->
            <manifest> 
                <attribute name="Built-By" value="${user.name}"/> 
                <attribute name="Main-class" value="package.Main"/> 
            </manifest> 
        </jar> 
        <!-- 复制jar文件  todir="复制到目录"-->
        <copy file="${hello_jar}" tofile="${dest}\temp.jar"/> 
        <copy todir="temp"> 
            <!-- 不按照默认方式 defaultexcludes="" -->
              <fileset dir="src"> 
                <include name="**/*.java"/>
              </fileset> 
        </copy> 
        
        <copy todir="temp2"> 
            <fileset dir="src">
                <and>
                    <contains text="main"/> 
                    <size value="1" when="more"/> 
                </and>
            </fileset>
        </copy> 
        
        <!-- 移动jar文件 -->
        <move file="${dest}\temp.jar" tofile="temp\move-temp.jar"/> 
        <!-- 创建zip -->
        <zip basedir="${basedir}\classes" zipfile="temp\output.zip"/> 
        <!-- 创建tgz -->
        <gzip src="classes\**\*.class" zipfile="output.class.gz"/>
        <!-- 解压zip -->
        <unzip src="output.class.gz" dest="extractDir"/> 
        <!--替换input.txt内容中的old为new
        <replace file="input.txt" token="old" value="new"/>
        --> 
    </target>
    
    <!-- 运行 -->
    <target name="run" depends="build">
        <java classname="com.hoo.test.HelloWorld" classpath="${hello_jar}"/>
    </target>
    
    <!-- 清除 -->
    <target name="clean">
        <!-- 删除生成的文件 -->
        <delete dir="${dest}"/>
        <delete file="${hello_jar}"/>
    </target>
    
    <tstamp> 
       <format property="OFFSET_TIME" 
               pattern="HH:mm:ss" 
               offset="10" unit="minute"/> 
    </tstamp>
    
    <!-- 重新运行 -->
    <target name="rerun" depends="clean,run">
        <echo message="###${TSTAMP}#${TODAY}#${DSTAMP}###"/>
        <aunt target="clean"/>
        <aunt target="run"/>
    </target>
</project>

 

 

 

转载于:https://my.oschina.net/u/2303275/blog/913574

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值