通过ant编译打包java 工程

 

 

1 引言

1.1 背景介绍

1.1.1 什么是Ant

Ant 是一个基于 Java 的构建工具。可以构建、测试与部署Java项目,项目的规模可以从很小到很大。

1.1.2 为什么要用Ant

1.跨平台--因为ant是使用java实现的;

2.使用简单--与ant的兄弟make比起来;

3.语法清晰--同样是和make相比;

4.功能强大--ant能做的事情很多,可能你用了很久,你仍然不知道它能有多少功能。当你自己开发一些ant插件的时候,你会发现它更多的功能。

1.2 写作目的

项目代码在CI上扫描时,有的扫描插件需要对java文件进行编译后扫描,所以需要开发人员提供代码的编译脚本,有的项目由多个工程组成,而且这些工程可能还有特定的编译顺序,用普通的bat或者bash脚本来编译就比较复杂;而ant就可以很方便的对多个工程进行编译打包。

1.3 安装说明

要使用Ant首先需要构建一个Ant环境,步骤如下:

1.       安装jdk

2.       安装Ant :(见附件)

3.       将Ant解压到你想安装Ant的目录

4.       在系统环境变量中添加ANT_HOME,路径为你安装Ant的目录,在PATH下添加ANT_HOME下的bin目录;

5.       测试一下你的设置,开始-->运行-->cmd进入命令行-->键入 ant 回车,如果看到Buildfile: build.xml does not exist!

Build failed

那么恭喜你你已经完成ant的安装

 

 

 

2 详解

2.1 如何用Ant进行编译

2.1.1 什么是build.xml

要运行ant需要有一个build.xml,虽然不一定要叫这个名字,但是这是ant默认的配置文件名。在运行ant时,ant会查找当前目录下的build.xml文件,根据其中的配置来执行相应的动作。

 

2.1.2 如何编写build.xml

下面给出一个简单的例子用来讲解:

 

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

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

 

<project name="Liantong_Woyun" default="default">

       <description>

           Local Integrated System Architecture" was build by Huawei Technology Co., Ltd.

</description>

 

       <property name="version" value="0.0.1" />

       <property name="src" value="src" />

       <property name="lib" value="portal\webtenant\ROOT\WEB-INF\lib" />

       <property name="dst" value="bin">

       </property>

   

       <target name="default" depends="compile" description="description">

       </target>

 

     <target name="dst_exist">

              <available file="${dst}" type="dir" property="dir_exist">

              </available>

       </target>

 

       <target name="mkdir_dst" depends="clean" unless="dir_exist">

              <mkdir dir="${dst}" />

       </target>

 

       <target name="compile" depends="mkdir_dst" description="description">

              <javac srcdir="${src}" destdir="${dst}" debug="on" includeAntRuntime="false" encoding="UTF-8">

                     <classpath>

                            <fileset dir="${lib}"></fileset>

                     </classpath>

              </javac>

       </target>

      

       <target name="clean" description="description">

              <delete dir="${dst}"></delete>

       </target>

 

</project>

 

 

 

 

下面先简单介绍一下的build.xml的常见元素:

2.1.2.1 Project元素

project是配置文件的根元素,里面配置了这个ant工程的工程名name和默认执行任务default。

name:用于指定project元素的名称。

default:用于默认执行时所执行的target名称

basedir:用于指定基路径的位置,这个属性没有指定时,使用build.xml的父目录作为基准目录。

2.1.2.2 description元素

description用于说明当前ant工程的(理解为注释就好了)。

2.1.2.3 property元素

property元素可看做常量或者是参数的定义,project的属性可以通过property元素来设定,也可以在ant之外通过properties文件设定。

2.1.2.4 target元素

它是ant的执行单元,可以包含一个或多个任务,多个target可以相互依赖;

 

name:target元素的名称,在同一个project元素中不能重复,可以通过指定的target-name运行某个target;

depends属性:用于描述target之间的依赖关系,若与多个target存在的依赖关系时,需要以“,”间隔。ant会依照depends属性中的target出现的顺序依次执行每个target。被依赖的target会先执行。例如:有三个targetABC,依赖关系为:A depends B,B depends C,那么执行顺序为C>B>A。

if属性:用于验证指定的属性是否存在,若不存在,所在的target将不会被执行。

unless属性: 它也用于验证指定的属性是否存在,如果不存在,所在的target则执行。

description属性:该属性是target功能的简短描述和说明。

 

2.1.2.5 例子详解

了解这些元素之后,我们再来看之前的那个例子,Ant的执行顺序就很清楚了在案例的配置文件中,project元素的default元素设置了默认任务为名为default的target。

1.Ant开始执行时,调用默认target,发现depends属性指向compile;

2.调用compile,发现depends属性指向mkdir_dst,mkdir_dst的depends属性指向clean;

3.执行clean任务,删除指定目录;

4.执行mkdir_dst任务,通过unless判断,如果当属性没有设置时才执行创建文件夹;

5.执行compile任务,用classpath指定编译依赖的文件位置,javac 元素的属性srcdir和destdir分别指定了编译的源码目录和目标目录。调用javac对java文件进行编译;

6.执行完成。

 

2.1.3 Ant的常用任务

刚才介绍了target是ant配置中的任务单元,下面介绍一下可以在target下设置的常用任务。

2.1.3.6 copy任务

该任务主要用来对文件和目录的复制功能。举例如下:

例1:

复制单个文件:<copy file="file.txt" tofile="copy.txt"/>

例2:

对文件目录进行复制:

   <copy todir="../newdir/dest_dir">

            <fileset dir="src_dir"/>

 </copy>

例3:

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

 <copy file="file.txt" todir="../other/dir"/>

2.1.3.7 delete任务

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

例1:

删除某个文件:<delete file="photo/amigo.jpg"/>

例2:

删除某个目录:<delete dir="photo"/>

例3:

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

        <delete includeEmptyDirs="true">

               <fileset dir="." includes="**/*.bak"/>

        </delete>

2.1.3.8 mkdir任务

创建目录。

例如:

<mkdir dir="build"/>

2.1.3.9 move任务

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

例1:

移动单个文件:<move file="fromfile" tofile=”tofile”/>

例2:

移动单个文件到另一个目录:<move file="fromfile" todir=”movedir”/>

例3:

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

        <move todir="newdir">

               <fileset dir="olddir"/>

        </move>

2.1.3.10 antcall任务

target 调用,用于执行同一个配置文件内的其他target 。

例如:<antcall target="compile"/>

2.1.3.11 ant任务

用于调用其他ant项目。通过antfile属性指定其他脚本,dir属性指定脚本路径,甚至可以用过target属性指定执行目标ant项目中的特定任务

例如:

<target name="build_logger_jar" depends="mkdir_dst" description="description">

              <ant antfile="another_build.xml" dir="${logger_dir}" inheritall="false" inheritrefs="false">

              </ant>

</target>

 

2.1.4  Ant的编译任务

2.1.4.12 利用Ant的javac任务来编译java程序

Ant的javac任务用于实现编译Java程序的功能。下面来看一个简单的例子:

首先我们建立名为一个src目录为源代码目录,在src目录下建立HelloWorld.java这个类文件。该类文件的内容如下:

public class HelloWorld {

    public static void main(String[] args) {

       System.out.println("Hello,TelcoOS");

    }

}

   同时在src目录的同级下建立build.xml文件,在该文件中编译src目录下的java文件,并将编译后的class文件放入build/classes目录中,在编译前,需清除classes目录,该文件的内容如下:

<?xml version="1.0"?>

<project name="javacTest"default="compile" basedir=".">

    <target name="clean">

       <delete dir="build"/>

    </target>

 

    <target name="compile" depends="clean">

       <mkdir dir="build/classes"/>

    <javac srcdir="src" destdir="build/classes"/>

    </target>

</project>

 

运行该build.xml文件,可在工程中看到新增了build/classes目录,并在该目录中生成了编译后的HelloWorld.class文件。

2.1.4.13 使用Ant的jar任务生成jar文件

jar任务用于将编译好的class文件打成jar包

例如:

       <target name="build" depends="compile" description="description">

              <jar jarfile="${package}" basedir="${dst}">

              </jar>

       </target>

2.1.4.14 使用Ant的war任务打包J2EE Web项目

war任务的使用方法和jar 类似,

例如:

<target name="war" depends="compile">

<war destfile="${build}/hello.war" webxml="WebRoot/WEB-INF/web.xml">

           <fileset dir="WebRoot" includes="**/*.jsp"/>

           <!-- lib目录下的jar包-->

           <lib dir="${lib}"/>

           <!—编译后的的class文件-->

           <classesdir="${classes}"/>

       </war>

3 总结

本文详细描述了Ant的安装与配置、关键元素和常用任务。并通过实例讲述了Ant在我们Java项目中的应用,讲述了编译、运行java程序,以及打jar包、war包等知识。

我们可以看到,Ant在自动构建和部署Java程序方面方便易用,而且非常灵活,是很实用的工具。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值