Java Ant

1.Ant是什么?

Apache Ant is a Java library and command-line tool whose mission is to drive processes described in build files as targets and extension points dependent upon each other.——apache

Ant是一种基于Java的build工具。理论上来说,它有些类似于(Unix)C中的make ,但没有make的缺陷。——百度百科

我的理解:通过写类似于一个脚本文件(windos下的*.bat,linux下的*.sh,而ant中的build.xml),来执行一系列的动作(targart)。这些动作可能是创建或移动文件、执行javac编译Java源码或执行jar打包、运行一些其它工具(如junit)等。最终形成jar包、war包等,最终可直接用于项目或运行。

2.Ant环境

0)JDK环境已配好

JAVA_HOME、Path。

1)下载

http://ant.apache.org/bindownload.cgi

image

2)解压,并配置环境

ANT_HOME:D:\Java\apache-ant-1.9.0
PATH:添加 %ANT_HOME%\bin;
测试:ant -version
image

3.Ant使用

3.1Hello World with Apache Ant

1)创建一个测试项目文件夹E:\ant-test\helloworld\

2)建立一个源文件夹目录:*\helloworld\src

3)建立类 src\oata\HelloWorld.java

package oata;

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World");
    }
}

4)用传统方法测试:

md build\classes
javac -sourcepath src -d build\classes src\oata\HelloWorld.java
java -cp build\classes oata.HelloWorld

正确结果:

Hello World
image

创建jar,再运行

echo Main-Class: oata.HelloWorld>myManifest
md build\jar
jar cfm build\jar\HelloWorld.jar myManifest -C build\classes .
java -jar build\jar\HelloWorld.jar
Java Ant_第1张图片

6)通过Ant来完成这个过程

a)创建一个build.xml

<project>
    <!--删除旧的编辑-->
    <target name="clean">
        <delete dir="build"/>
    </target>
    <!—编译 放到build/classes中-->
    <target name="compile">
        <mkdir dir="build/classes"/>
        <javac srcdir="src" destdir="build/classes"/>
    </target>
    <!--通过jar命令 打包为jar-->
    <target name="jar">
        <mkdir dir="build/jar"/>
        <jar destfile="build/jar/HelloWorld.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="oata.HelloWorld"/>
            </manifest>
        </jar>
    </target>
    <!--通过java命令 运行它-->
    <target name="run">
        <java jar="build/jar/HelloWorld.jar" fork="true"/>
    </target>

</project>

b)通过ant命令来运行

(ant clean 可选) ant compile
ant jar
ant run
Java Ant_第2张图片
或者:
ant clean compile jar run
Java Ant_第3张图片

c)对比两种方式

Java Ant_第4张图片

7)增强Ant功能

a)修改build.xml

<!--指定工程名,工程目录,默认运行的target为 main-->
<project name="HelloWorld" basedir="." default="main">
    <!--定义属性,或以共用,<name,value>形式-->
    <property name="src.dir"     value="src"/>

    <property name="build.dir"   value="build"/>
    <property name="classes.dir" value="${build.dir}/classes"/>
    <property name="jar.dir"     value="${build.dir}/jar"/>

    <property name="main-class"  value="oata.HelloWorld"/>



    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
    </target>
    <!--运行之前,先运行compile--> 
    <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>
        <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>
    <!--运行之前,先运行jar-->
    <target name="run" depends="jar">
        <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
    </target>

    <target name="clean-build" depends="clean,jar"/>
    <!--运行之前,先运行clean,run-->
    <target name="main" depends="clean,run"/>

</project> 

b)只要运行 ant

Java Ant_第5张图片

8)使用外部的jar

a)例如,使用Log4j,将log4j-1.2.14.jar放到工程目录\lib\下

package oata;

import org.apache.log4j.Logger;
import org.apache.log4j.BasicConfigurator;

public class HelloWorld {
    static Logger logger = Logger.getLogger(HelloWorld.class);

    public static void main(String[] args) {
        BasicConfigurator.configure();
        logger.info("Hello World");          // the old SysO-statement
    }
}

b)在build中添加jar(即添加类路径)

<project name="HelloWorld" basedir="." default="main">
    ...
    <property name="lib.dir" value="lib"/>

    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>

    ...

    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
    </target>

    <target name="run" depends="jar">
        <java fork="true" classname="${main-class}">
            <classpath>
                <path refid="classpath"/>
                <path location="${jar.dir}/${ant.project.name}.jar"/>
            </classpath>
        </java>
    </target>

    ...

</project>

c)运行

Java Ant_第6张图片

9)加载外部文件

a)在src目录下创建log4j.properties文件

log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p%d{yyyy-MM-dd(HH:mm:ss)} [%L]-[%c] - %m%n-[%F]

b)修改build.xml,编译完成后,将properties拷到classes目录下

...
    <target name="compile">
        <mkdir dir="${classes.dir}"/>
        <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
        <copy todir="${classes.dir}">
            <fileset dir="${src.dir}" excludes="**/*.java"/>
        </copy>
    </target>
    ...

c)执行ant

Java Ant_第7张图片

10)使用Junit(Ant has a built-in JUnit 3.8.2)

a)建立src/HelloWorldTest.java

public class HelloWorldTest extends junit.framework.TestCase {

    public void testNothing() {
    }
    
    public void testWillAlwaysFail() {
        fail("An error message");
    }
    
}

b)执行ant

如果出现“错误: 程序包junit.framework不存在”

在http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22junit%22%20AND%20a%3A%22junit%22下载junit-3.8.2.jar,并放到工程的lib目录中。

Java Ant_第8张图片

c)产生测试报告,配置build.xml

 ...
    <property name="report.dir"  value="${build.dir}/junitreport"/>
    ...
    <target name="junit" depends="jar">
        <mkdir dir="${report.dir}"/>
        <junit printsummary="yes">
            <classpath>
                <path refid="classpath"/>
                <path refid="application"/>
            </classpath>
            
            <formatter type="xml"/>
            
            <batchtest fork="yes" todir="${report.dir}">
                <fileset dir="${src.dir}" includes="*Test.java"/>
            </batchtest>
        </junit>
    </target>
    
    <target name="junitreport">
        <junitreport todir="${report.dir}">
            <fileset dir="${report.dir}" includes="TEST-*.xml"/>
            <report todir="${report.dir}"/>
        </junitreport>
    </target>

        运行 ant junit,将在 build/junitreport/中生成一个xml文件:TEST-HelloWorldTest.xml

        运行ant junitreport,会生成 html形式的报告

Java Ant_第9张图片

你可能感兴趣的:(Java Ant)