使用ant管理工程的HelloWorld示例

来源:互联网 发布:macbook办公软件好用吗 编辑:程序博客网 时间:2024/06/05 16:39

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, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.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>


原创粉丝点击