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

创建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
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
或者:
ant clean compile jar run

c)对比两种方式

image

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

image

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">
    ...
    
    ...

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

    <target name="run" depends="jar">
        <java fork="true" ">
            
        </java>
    </target>

    ...

</project>

c)运行

image

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

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目录中。

image

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形式的报告

image

转载于:https://my.oschina.net/hjswust/blog/125426

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值