文档章节

ant 工程打包

 沙漠中的水手
发布于 2017/06/02 23:45
字数 1729
阅读 9
收藏 0

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

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

3、创建maven 工程

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 命令,得一下结果:

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>

输出结果:

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>

输出结果:

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>

执行结果:

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>

运行结果:

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>

运行结果:

同样打包操作的的还有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>

 

 

 

© 著作权归作者所有

粉丝 0
博文 2
码字总数 2087
作品 0
万州
私信 提问
使用Ant 实现批量打包Android应用

由于公司运维需要以及应用中需要加上应用推广的统计,往往要对应二三十个渠道,按照正常方法一个一个的去生成不同渠道包的应用,不仅浪费了时间,而且大大降低了效率. 上一篇讲到使用Ant进行...

Easince
2012/11/27
0
0
Android Ant 批量多渠道打包实例

Android Ant 批量多渠道打包实例 关于批量打包,无需多言,这是每个国内Android开发者必须面对的一个问题。 下面,我就以开源项目「知乎小报」为例,详细说明如何使用ANT实现批量打渠道包。 ...

Cundong
2014/10/17
0
7
基于Jenkins + Tomcat 的安卓客户端可持续化构建及发布下载(loltube.cn)

一. Jenkins 可持续化构建环境请参考 文章 http://my.oschina.net/long0419/blog/183299 二. 基于搭好可持续构建环境完成基础上 ,使用Ant 来编写安卓持续化构建环境 (未使用gradle 原理一样...

long0419
2015/04/02
0
0
用Scala 开发 Spring MVC

最近尝试用scala来写spring应用。工程是通过ant来编译部署的,因为通过eclipse直接部署到tomcat的话,scala文件不会被编译。后来才发现Spring已经有一个在开发中的项目 Spring Scala。后面有...

ForEleven
2013/04/17
0
14
Android项目导出jar包的小技巧

我们知道,可以通过如下设置将一个普通的Android工程转换成Android Library工程 ![android_library_project][1] 设置前后工程变化如下 ![project_properties][2] 使用Ant编译时(通过android...

chenming
2014/06/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ajax

定义 Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,用于创建动态网页 Ajax=Asynchronous Javascript And XML(异步的JavaScript和XML) 原理 XMLHttpRequest对象(异...

星闪海洋
昨天
2
0
Jenkins 中文本地化的重大进展

本文首发于:Jenkins 中文社区 我从2017年开始,参与 Jenkins 社区贡献。作为一名新成员,翻译可能是帮助社区项目最简单的方法。 本地化的优化通常是较小的改动,你无需了解项目完整的上下文...

Jenkins中文社区
昨天
3
0
Spring中如何使用设计模式

关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。 1. 策略模式 关于策略模式的使用方式,在S...

爱宝贝丶
昨天
3
0
前后端分离-前端搭建(vue)

前端使用vue,那么怎么搭建vue呢 先安装nodejs以及npm 现在基本的nodejs都包含有npm,下载安装后, 可以在cmd命令里输入 node -v 和npm -v 分别查看安装的版本 两个都显示了版本就是安装ok ...

咸鱼-李y
昨天
3
0
聊聊elasticsearch的DeadlockAnalyzer

序 本文主要研究一下elasticsearch的DeadlockAnalyzer DeadlockAnalyzer elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/monitor/jvm/DeadlockAnalyzer.java public class Dea......

go4it
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部