ant编译tomcat-web项目

环境依赖说明 : jdk
不同版本的ant需匹配不同版本的jdk
1.9.*版本-运行时至少需要Java5
1.10.*版本-运行时至少需要Java8
官网 : http://ant.apache.org/
下载地址 : https://ant.apache.org/bindownload.cgi

  • 安装
wget https://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.10.8-bin.tar.gz
 
tar zxvf apache-ant-1.10.8-bin.tar.gz -C /usr/local/
 
ln -s /usr/local/apache-ant-1.10.8/bin/ant /usr/sbin/
  • 添加ant配置文件

在项目目录中添加ant脚本文件
vim build.xml

<?xml version="1.0" encoding="UTF-8"?>
 
<project basedir="." name="web-test" default="buildwar">
 
    <!-- 配置环境变量 -->
    <property name="program.name" value="web-test" />
    <property name="com.dir" location="./WebRoot/WEB-INF/classes/com" />
    <property name="program.dir" location="./${program.name}" />
    <property name="source.dir" location="./WebRoot" />
    <property name="lib.dir" location="./${program.name}/WEB-INF/lib" />
    <property name="class.dir" location="./${program.name}/WEB-INF/classes" />
    <property name="src" location="./src" />
 
    <!-- 准备程序目录 -->
    <target name="init"  description="准备程序所需目录">
        <delete dir="${com.dir}" />
        <delete dir="${program.dir}" />
        <mkdir dir="${com.dir}" />
        <mkdir dir="${program.dir}" />
    </target>
 
    <!-- 将已有文件copy至项目目录 -->
    <target name="prepare" depends="init" description="复制项目文件至新目录">
        <copy todir="${program.dir}" overwrite="true">
            <fileset dir="${source.dir}" />
        </copy>
        <copy todir="${class.dir}/" overwrite="true">
            <fileset dir="${src}">
                <exclude name="com/"/>
            </fileset>
        </copy>
    </target>
 
    <!-- 编译Java文件 -->
    <target name="compile" depends="init,prepare" description="编译Java文件">
        <javac srcdir="${src}"
            destdir="${class.dir}"
            fork="true"
            debug="on"
            encoding="UTF-8"
            includeantruntime="on">
            <classpath>
                <fileset dir="${lib.dir}">
                    <include name="**/*.jar" />
                </fileset>
            </classpath>
        </javac>
    </target>
 
    <!-- 打war包 -->
    <target name="buildwar" depends="init,prepare,compile" description="将编译后项目进行打包">
        <war destfile="${program.name}.war"
            webxml="${program.dir}/WEB-INF/web.xml"
            defaultexcludes="true">
            <fileset dir="${program.dir}">
                <!-- <include name="**/**" /> -->
                <!-- <exclude name="**/**" /> -->
            </fileset>
        </war>
    </target>
 
</project>
  • 使用说明
##在目录中,直接执行ant命令
ant
 
##在目录中,指定配置文件
ant -f build.xml


  • 配置文件参数说明:

包含一个project节点和至少一个target节点,target节点包含多个task元素。简单说,target节点代表着你的构建目标,而该目标是由多个操作/任务(task)来达成的。

project   ---   根节点,代表一个工程
###属性说明:
 
name:项目名称。 (非必填)
basedir:指定基路径的位置。该属性没有指定时,使用Ant的构件文件的附目录作为基准目录。 (非必填)
default:指定project默认执行时所执行的target的名称。 (非必填)
property   ---   设置一个或多个属性(可以在其它地方通过${属性名}进行引用)
###属性说明:
 
name:要设置的属性名称。
value:属性的值。
location:将属性设置为给定文件的绝对路径。如果此属性的值为绝对路径,则保持不变,否则会相对于项目的basedir解析路径。
refid:引用其他位置的定义。
resource:包含属性文件格式属性设置的类路径的资源名称。
file:要加载的属性文件位置。
url:包含属性文件格式设置的url。
environment:检索环境变量时使用的前缀。
classpath:查找资源使用的类路径。
classpathref:类路径的引用。
prefix:通过file、resouorce和url加载属性时使用的前缀。
target   ---   目标节点,代表着一个构建目标
###属性说明:
 
name:target的名字。 (必填)
depends:用逗号分隔的target的名字列表,也就是依赖表。 (非必填)
description:关于target功能的简短描述。 (非必填)
if:满足条件执行(true)。 (非必填)
unless:不满足条件执行(false)。 (非必填)
target中常见tasks说明:
 
============
delete   ---   删除目录或文件
###属性说明:
dir: 表示要删除的目录,该目录下的文件和子目录都会被删除
file: 表示要删除的文件
 
============
mkdir   ---   创建目录
###属性说明:
dir: 表示要创建目录
 
============
echo   ---   向屏幕或文件输出信息
###属性说明:
message: 表示要输出的信息
file:表示信息输出到该文件中(如果指定了该属性,信息将不会在屏幕上显示)
level:表示信息级别(未指定该属性时的默认级别为"warning")
 
============
copy   ---   拷贝文件或目录
###属性说明:
todir: 表示拷贝到哪个目录下
includeemptydirs:是否拷贝空目录
file:要拷贝的单个文件(只针对单个文件的拷贝,上例中没有指定该属性,而是通过内嵌<fileset>来指定多个文件)
 
============
javac   ---   编译源文件
###属性说明:
srcdir: 源文件路径(多个源之间用:分隔,可通过内嵌<src>元素进行设定,如上例)
destdir: 存放编译后的class文件路径
includes: 包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的.java文件被包含进去
excludes: 排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。
debug: 编译时是否显示调试信息
includeantruntime: 是否包含ant库路径
classpath: 依赖库路径(上例中通过内嵌<classpath>元素进行了设定)
 
============
jar   ---   将class文件打成jar包
###属性说明:
destfile:将创建的jar包位置
basedir:将被打成jar包的目录(或通过内嵌的<fileset>元素进行设定)
includes:包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的文件被包含进去
excludes:排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。
 
============
war   ---  将项目文件打包成war包
###属性说明:
destfile:将创建的war包位置名称
webxml:指定web相关信息文件路径位置
basedir:将被打成war包的目录(或通过内嵌的<fileset>元素进行设定)
ant中经常需要指定资源集合,主要通过下面元素指定
 
============
fileset
###属性说明:
dir    文件集合的根目录(该目录下的文件都会被包含)
file   快捷指定单个文件
includes  包含的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。该属性省略时,所有的文件被包含进去
excludes  排除的文件列表(多个列表用逗号或空格分隔,列表可用通配符指定)。
可内嵌<include>、<exclude>、<includesfile>、<excludesfile>等元素
 
============
patternset   ---   模式集合
###属性说明:
id 唯一标识(其它<patternset>元素通过refid指向该模式)
可内嵌<include>、<exclude>、<includesfile>、<excludesfile>等元素
 
============
include   ---   指定单个包含
exclude   ---   指定单个排除
###属性说明:
name 要包含或排除的模式。
 
============
includesfile   ---   指定单个包含
excludesfile   ---   指定单个排除
###属性说明:
name 模式文件名(文件内容为包含或排除模式)
ant运行java类,或执行编译时,都需要指定classpath,可通过下面三个元素来指定引用的jar包或class文件
============
classpath   ---   类路径,内嵌在<javac>,<java>等元素中,表示依赖库路径
###属性说明:
refid    指向该id对应的元素
location 单个文件或目录(目录可以是相对路径或绝对路径,相对路径是指相对于工程的基准路径)
path     多个location的集合(各location以冒号或分号进行分隔),一般用来引用预定义的路径,如引用环境变量${classpath}
其它说明:可内嵌<fileset>、<pathelement>等元素来指定jar文件或目录
 
============
path   ---   类路径集合,被<classpath>或其它<path>引用。
path用法类似<classpath>元素,但是<path>跟<target>同级,而classpath是内嵌在<java>或<javac>元素中。
 
============
pathelement   ---   单个类路径,内嵌在<classpath>或<path>中
###属性说明
location 单个文件或目录(目录可以是相对路径或绝对路径,相对路径是指相对于工程的基准路径)
path     多个location的集合(各location以冒号或分号进行分隔),一般用来引用预定义的路径,如引用环境变量${classpath}

  • javac指定编译器

修改build.xml中配置文件,增加配置executable="/usr/local/jdk1.8.0_241/bin/javac"

    <target name="compile" depends="init,prepare" description="编译Java文件">
        <javac executable="/usr/local/jdk1.8.0_241/bin/javac"
            srcdir="${src}"
            destdir="${class.dir}"
            fork="true"
            debug="on"
            encoding="UTF-8"
            includeantruntime="on">
            <classpath>
                <fileset dir="${lib.dir}">
                    <include name="**/*.jar" />
                </fileset>
            </classpath>
        </javac>
    </target>
posted @ 2020-07-23 17:39  陶玉轩  阅读(526)  评论(0编辑  收藏  举报