使用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>
- 使用ant管理工程的HelloWorld示例
- 使用ant编译helloworld.java的实例
- 用ant进行工程管理
- Ant使用示例
- 使用IDEA创建HelloWorld工程
- GitHub Ant-Design/ant-init 使用示例
- ANT--HELLOWORLD
- 使用Ant构建Android工程
- 使用ant编译android工程
- Flex工程 使用ant编译
- 使用 ant 编译 android 工程
- 使用ant实现自动化示例
- 使用ant部署eclipse开发的web工程到tomcat
- Hudson中使用ant编译工程乱码问题的解决
- 使用ANT编译超过64K方法的Android工程
- 使用ant编译android工程遇到的问题
- 利用jenkens和ant来自动化打包、部署、执行你的helloWorld工程只(菜鸟成长之路一)
- 基于apache ant工程的Jacoco覆盖率工具使用之ant 脚本编写
- 简介.NET是什么
- 7z格式、LZMA压缩算法和7-Zip详细介绍
- 前端框架你究竟选什么
- 面向对象编程和面向接口编程
- Android应用自动更新功能的代码实现
- 使用ant管理工程的HelloWorld示例
- windows bat脚本编写入门,可以做windows的crontab
- 常用的BaseAction类
- switch语句无法使用R.id.xxx的解决办法
- WTL/ATL CString CStringA 到 char *
- struts2 实现原理解析
- zoj 1696 Viva Confetti
- iOS7-解决 "The document “XXXX.xib/storyboard" could not be opened. Could not read archive"
- C++ 获取当前正在执行的函数的相关信息