使用ant管理工程的HelloWorld示例

本文介绍了Apache Ant的安装、使用及改进方法,包括构建工程、使用外部库、复制外部文件和JUnit测试等步骤,通过一个HelloWorld示例展示其功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.说明

apache ant是一个轻量级的、基于命令行的工程管理工具。


2.安装ant

(1)ant下载:http://ant.apache.org/bindownload.cgi

(2)解压下载的包到任意目录,记住目录,例如我的是:C:\apache-ant-1.9.2

(3)设置环境变量,ANT_HOME:C:\apache-ant-1.9.2,path:;C:\apache-ant-1.9.2。输入 ant -help 测试。

3.准备一个工程HelloWorld

在工作空间创建一个目录:antdemo作为工程根目录,创建src目录,存放java源文件。

创建源文件:rc\oata\HelloWorld.java

package oata;

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

4.简单的ant工程管理

ant管理工程使用的是一个名为build.xml的文件,运行ant命令,会查找目录下的build.xml,按照他定义的规则运行。build.xml一般放在工程根目录下。

下面是一个简单的build.xml

<project>
    <!--定义清除命令-->
    <target name="clean">
        <!--删除目录-->
        <delete dir="build"/>
    </target>

    <!--定义编译命令-->
    <target name="compile">
        <!--创建目录-->
        <mkdir dir="build/classes"/>
        <!--调用javac,相当于javac -sourcepath src -d build\classes src\oata\HelloWorld.java -->
        <javac srcdir="src" destdir="build/classes"/>
    </target>

    <!--定义打包命令,把编译的class文件打包成一个jar文件-->
    <target name="jar">
        <mkdir dir="build/jar"/>
        <!-- 调用jar打包-->
        <jar destfile="build/jar/HelloWorld.jar" basedir="build/classes">
            <manifest>
                <attribute name="Main-Class" value="oata.HelloWorld"/>
            </manifest>
        </jar>
    </target>

    <!--运行 -->
    <target name="run">
        <!--调用java执行-->
        <java jar="build/jar/HelloWorld.jar" fork="true"/>
    </target>

</project>

build.xml文件的主要内容是一大堆target,相当于makefile中的任务,例如上面定义了name=“clean”的target,就可以在命令行ant clean来执行任务。

命令行执行:ant compile jar run


结果:



5.改进build.xml

上面的build文件,有很多可以改进的地方。

1.build.xml可以通过

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

定义属性,可以复用属性

2.target可以依赖另一个target。

改进后的build.xml文件

<?xml version="1.0" encoding="windows-1250"?>

<project name="HelloWorld" basedir="." default="main">

    <!--定义属性src.dir-->
    <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,相当于javac -sourcepath src -d build\classes src\oata\HelloWorld.java -->
        <javac srcdir="${src.dir}" destdir="${classes.dir}"/>
    </target>

    <!--定义打包命令,把编译的class文件打包成一个jar文件-->
    <target name="jar">
        <mkdir dir="${jar.dir}"/>
        <!-- 调用jar打包-->
        <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>

    <!--运行 -->
    <target name="run" depends="compile,jar">
        <!--调用java执行-->
        <java jar="${jar.dir}/${ant.project.name}.jar" fork="true"/>
    </target>
    
    <!--定义clean-build,依赖于clean和jar-->
    <target name="clean-build" depends="clean,jar"/>

    <!--定义main,依赖于clean和run-->
    <target name="main" depends="clean,run"/>

</project>

6.使用外部库

使用log4j打印log:

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
    }
}

增加外部库,编译(compile)的使用需要使用,运行(run)也需要使用。

build文件修改如下:

<!--定义外部库的存放目录-->
    <property name="lib.dir"     value="lib"/>

    <!--定义一个path元素,指定id属性,供后面引用-->
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>
    ......
     <!--定义编译命令-->
    <target name="compile">
        <!--创建目录-->
        <mkdir dir="${classes.dir}"/>
        <!--调用javac,相当于javac -sourcepath src -d build\classes src\oata\HelloWorld.java -->
        <!--引用classpath-->
        <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
    </target>
    
     <!--运行 -->
    <target name="run" depends="compile,jar">
        <!--调用java执行-->
        <java classname="${main-class}" fork="true">
          <!--定义classpath-->
          <classpath >
        	<path refid="classpath"/>
            	<path location="${jar.dir}/${ant.project.name}.jar"/>
          </classpath>
        </java >
    </target>


7.外部文件复制

有时应用运行需要要外部配置文件,例如log4j的配置文件:log4j.properties。

创建文件:resource/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=%m%n

修改compile,

<!--定义编译命令-->
    <target name="compile">
        <!--创建目录-->
        <mkdir dir="${classes.dir}"/>
        <!--调用javac,相当于javac -sourcepath src -d build\classes src\oata\HelloWorld.java -->
        <!--引用classpath-->
        <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
        
        <!--复制配置文件-->
        <copy todir="${classes.dir}">
            <fileset dir="${resource.dir}" excludes="**/*.java"/>
        </copy>
        
    </target>


8.使用junit测试


(1)下载junit.jar 放入,lib目录

(2)写测试代码:新建src/test/HelloWorldTest.java

package test;

import junit.framework.*;

public class HelloWorldTest extends junit.framework.TestCase {

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

(3)修改build.xml

 <!--定义应用的path,用于测试-->
    <path id="application" location="${jar.dir}/${ant.project.name}.jar"/>

......

  <!--运行 -->
    <target name="run" depends="jar">
        <!--调用java执行-->
        <java classname="${main-class}" fork="true">
          <!--定义classpath-->
          <classpath >
        	<path refid="classpath"/>
            	<path refid="application"/>
           </classpath>
        </java >
    </target>


<!--定义测试任务 -->
    <target name="junit" depends="jar" >
        <junit printsummary="yes">
            <classpath>
                <path refid="classpath"/>
                <path refid="application"/>
            </classpath>
            <batchtest fork="yes">
                <fileset dir="${src.dir}" includes="test/*Test.java"/>
            </batchtest>
        </junit>
    </target>

运行ant junit

结果:




最后的build.xml文件

<?xml version="1.0" encoding="windows-1250"?>

<project name="HelloWorld" basedir="." default="main">

    <!--定义属性src.dir-->
    <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"/>
    
    <!--定义外部库的存放目录-->
    <property name="lib.dir"     value="lib"/>
     <!--配置文件目录-->
    <property name="resource.dir"     value="resource" />

    <!--定义一个path元素,指定id属性,供后面引用-->
    <path id="classpath">
        <fileset dir="${lib.dir}" includes="**/*.jar"/>
    </path>
    
    <!--定义应用的path,用于测试-->
    <path id="application" location="${jar.dir}/${ant.project.name}.jar"/>
    
    
    <!--定义清除命令-->
    <target name="clean">
        <!--删除目录-->
        <delete dir="${build.dir}"/>
    </target>

    <!--定义编译命令-->
    <target name="compile">
        <!--创建目录-->
        <mkdir dir="${classes.dir}"/>
        <!--调用javac,相当于javac -sourcepath src -d build\classes src\oata\HelloWorld.java -->
        <!--引用classpath-->
        <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath"/>
        
        <!--复制配置文件-->
        <copy todir="${classes.dir}">
            <fileset dir="${resource.dir}" excludes="**/*.java"/>
        </copy>
        
    </target>

    <!--定义打包命令,把编译的class文件打包成一个jar文件-->
    <target name="jar" depends="compile">
        <mkdir dir="${jar.dir}"/>
        <!-- 调用jar打包-->
        <jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
            <manifest>
                <attribute name="Main-Class" value="${main-class}"/>
            </manifest>
        </jar>
    </target>

    <!--运行 -->
    <target name="run" depends="jar">
        <!--调用java执行-->
        <java classname="${main-class}" fork="true">
          <!--定义classpath-->
          <classpath >
        		<path refid="classpath"/>
            <path refid="application"/>
        	</classpath>
        </java >
    </target>
    
    <!--定义clean-build,依赖于clean和jar-->
    <target name="clean-build" depends="clean,jar"/>

    <!--定义clean-build,依赖于clean和run-->
    <target name="main" depends="clean,run"/>
    
    <!--定义测试任务 -->
    <target name="junit" depends="jar" >
        <junit printsummary="yes">
            <classpath>
                <path refid="classpath"/>
                <path refid="application"/>
            </classpath>
            <batchtest fork="yes">
                <fileset dir="${src.dir}" includes="test/*Test.java"/>
            </batchtest>
        </junit>
    </target>

</project>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值