http://hi.baidu.com/yinjicheng1987/item/f0909a15dcd1f7fdddeecabe
. ├── build.xml └── src └── HelloWorld.java
事实上这个package是什么并没有关系,你也不必在当前文件夹下建立这样的子目录/myant./demo/。这个package会在编译以后在我们定义的classes文件夹下自动编译出目录来。
package myant.demo; public class HelloWorld { public static void main( String args[] ) { System.out.println("Hello world. "); } }
<?xml version="1.0" encoding="gbk" ?> <!--工程的名字是HelloWorld--> <project name="HelloWorld" default="run" basedir="."> <!-- 定义资源,包括源文件目录,目标文件目录,和jar文件 --> <property name="src" value="src"/> <property name="dest" value="classes"/> <property name="hello_jar" value="hello.jar"/> <!-- 定义第一个目标:初始化,新建目标文件目录 --> <target name="init"> <mkdir dir="${dest}"/> </target> <!-- 定义第二个目标:编译源文件,把产品放入classes/--> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${dest}"/> </target> <!-- 定义第三个目标:构建jar文件,目标文件为hello_jar指定的文件名 --> <target name="build" depends="compile"> <jar jarfile="${hello_jar}" basedir="${dest}"/> </target> <!-- 定义最后一个目标:运行文件 --> <target name="run" depends="build"> <java classname="myant.demo.HelloWorld" classpath="${hello_jar}"/> </target> </project>mkdir是建立目录,
[xxx@xxxsrc]$ ant Buildfile: /home/xxx/test/src/build.xml init: [mkdir] Created dir: /home/xxx/test/src/classes compile: [javac] /home/xxx/test/src/build.xml:17: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds [javac] Compiling 1 source file to /home/xxx/test/src/classes build: [jar] Building jar: /home/xxx/test/src/hello.jar run: [java] Hello world. BUILD SUCCESSFUL Total time: 0 seconds
. ├── build.xml ├── classes │ └── myant │ └── demo │ └── HelloWorld.class ├── hello.jar └── src └── HelloWorld.java
http://www.cnblogs.com/clarkchen/archive/2011/03/10/1980194.html
Ant的构建文件当开始一个新的项目时,首先应该编写Ant构建文件。构建文件定义了构建过程,并被团队开发中每个人使用。Ant构建文件默认命名为build.xml,也可以取其他的名字。只不过在运行的时候把这个命名当作参数传给Ant。构建文件可以放在任何的位置。一般做法是放在项目顶层目录中,这样可以保持项目的简洁和清晰。下面是一个典型的项目层次结构。
(1) src存放文件。
(2) class存放编译后的文件。
(3) lib存放第三方JAR包。
(4) dist存放打包,发布以后的代码。
Ant构建文件是XML文件。每个构建文件定义一个唯一的项目(Project元素)。每个项目下可以定义很多目标(target元素),这些目标之间可以有依赖关系。当执行这类目标时,需要执行他们所依赖的目标。每个目标中可以定义多个任务,目标中还定义了所要执行的任务序列。Ant在构建目标时必须调用所定义的任务。任务定义了Ant实际执行的命令。Ant中的任务可以为3类。
(1) 核心任务。核心任务是Ant自带的任务。
(2) 可选任务。可选任务实来自第三方的任务,因此需要一个附加的JAR文件。
(3) 用户自定义的任务。用户自定义的任务实用户自己开发的任务。
举例如下:
通常,src存放Java源文件,classes存放编译后的class文件,lib存放编译和运行用到的所有jar文件,web存放JSP等web文件,dist存放打包后的jar文件,doc存放API文档。
<? xml version = "1.0" ?> < project name = "Hello world" default = "doc" > <!-- properies --> < property name = "src.dir" value = "src" /> < property name = "report.dir" value = "report" /> < property name = "classes.dir" value = "classes" /> < property name = "lib.dir" value = "lib" /> < property name = "dist.dir" value = "dist" /> < property name = "doc.dir" value = "doc" /> <!-- 定义classpath --> < path id = "master-classpath" > < fileset file = "${lib.dir}/*.jar" /> < pathelement path = "${classes.dir}" /> </ path > <!-- 初始化任务 --> < target name = "init" > </ target > <!-- 编译 --> < target name = "compile" depends = "init" description = "compile the source files" > < mkdir dir = "${classes.dir}" /> < javac srcdir = "${src.dir}" destdir = "${classes.dir}" target = "1.4" > < classpath refid = "master-classpath" /> </ javac > </ target > <!-- 测试 --> < target name = "test" depends = "compile" description = "run junit test" > < mkdir dir = "${report.dir}" /> < junit printsummary = "on" haltonfailure = "false" failureproperty = "tests.failed" showoutput = "true" > < classpath refid = "master-classpath" /> < formatter type = "plain" /> < batchtest todir = "${report.dir}" > < fileset dir = "${classes.dir}" > < include name = "**/*Test.*" /> </ fileset > </ batchtest > </ junit > < fail if = "tests.failed" > *********************************************************** **** One or more tests failed! Check the output ... **** *********************************************************** </ fail > </ target > <!-- 打包成jar --> < target name = "pack" depends = "test" description = "make .jar file" > < mkdir dir = "${dist.dir}" /> < jar destfile = "${dist.dir}/hello.jar" basedir = "${classes.dir}" > < exclude name = "**/*Test.*" /> < exclude name = "**/Test*.*" /> </ jar > </ target > <!-- 输出api文档 --> < target name = "doc" depends = "pack" description = "create api doc" > < mkdir dir = "${doc.dir}" /> < javadoc destdir = "${doc.dir}" author = "true" version = "true" use = "true" windowtitle = "Test API" > < packageset dir = "${src.dir}" defaultexcludes = "yes" > < include name = "example/**" /> </ packageset > < doctitle > <![CDATA[<h1>Hello, test</h1>]]> </ doctitle > < bottom > <![CDATA[<i>All Rights Reserved.</i>]]> </ bottom > < tag name = "todo" scope = "all" description = "To do:" /> </ javadoc > </ target > </ project >
以上xml依次定义了init(初始化),compile(编译),test(测试),doc(生成文档),pack(打包)任务,可以作为模板。
http://blog.chinaunix.net/uid-9398085-id-362360.html
就像每个语言都有HelloWorld一样,一个最简单的应用能让人感受一下Ant
package test.ant; public class HelloWorld { public static void main( String args[] ) { System.out.println("Hello world. "); } }
你可以手动的用javac 、copy 、jar、java来完成,但是考虑一下如果你有成百上千个类,在多次调试,部署的时候,一次次的javac 、copy、jar、
java那将是一份辛苦的工作。现在看看ant怎么优雅的完成它们。
要运行ant需要有一个build.xml虽然不一定要叫这个名字,但是建议你这么做,下边就是一个完整的build.xml,然后我们来详细的解释每一句:
<?xml version="1.0" encoding="UTF-8" ?> <project name="HelloWorld" default="run" basedir="."> <property name="src" value="src"/> <property name="dest" value="classes"/> <property name="hello_jar" value="hello1.jar"/> <target name="init"> <mkdir dir="${dest}"/> </target> <target name="compile" depends="init"> <javac srcdir="${src}" destdir="${dest}"/> </target> <target name="build" depends="compile"> <jar jarfile="${hello_jar}" basedir="${dest}"/> </target> <target name="run" depends="build"> <java classname="test.ant.HelloWorld" classpath="${hello_jar}"/> </target> <target name="clean"> <delete dir="${dest}" /> <delete file="${hello_jar}" /> </target> <target name="rerun" depends="clean,run"> <ant target="clean" /> <ant target="run" /> </target> </project>
<?xml version="1.0" encoding="UTF-8" ?>build.xml中的第一句话,没有实际的意义
<project name="HelloWorld" default="run" basedir="."> </project>ant的所有内容必须包含在这个里边,name是你给它取的名字,basedir故名思意就是工作的根目录 .代表当前目录。default代表默认要做的事情。
<property name="src" value="src"/>类似程序中的变量,为什么这么做想一下变量的作用
<target name="compile" depends="init"> <javac srcdir="${src}" destdir="${dest}"/> </target>把你想做的每一件事情写成一个target ,它有一个名字,depends是它所依赖的target,在执行这个target 例如这里的compile之前ant会先检查init是否曾经被执行过,如果执行
<target name="compile" depends="init"> <javac srcdir="${src}" destdir="${dest}"/> </target>做jar包:
<target name="build" depends="compile"> <jar jarfile="${hello_jar}" basedir="${dest}"/> </target>运行:
<target name="run" depends="build"> <java classname="test.ant.HelloWorld" classpath="${hello_jar}"/> </target>为了不用拷贝,我们可以在最开始定义好目标文件夹,这样ant直接把结果就放在目标文件夹中了
<target name="init"> <mkdir dir="${dest}"/> </target>为了更多一点的功能体现,又加入了两个target
<target name="clean"> <delete dir="${dest}" /> <delete file="${hello_jar}" /> </target>再次运行,这里显示了如何在一个target里边调用其他的target
<target name="rerun" depends="clean,run"> <ant target="clean" /> <ant target="run" /> </target>好了,解释完成了,下边检验一下你的ant吧
ant buildant中的每一个任务都可以这样调用ant + target name