[转载] 无所不能的“蚂蚁”--Ant
来源:互联网 发布:桑德拉布洛克 知乎 编辑:程序博客网 时间:2024/04/30 00:34
现在开始我将进入一个"蚂蚁"的世界,通过例子,真真正正去了解他!
文章参考资料可以到http://www.manning.com/antbook去下载
Ant的最好学习资料<<使用Ant进行Java开发>>
Ant的官方网站: http://ant.apache.org/
Ant的最新版本:Ant 1.6.5
本文所有的例子运行的环境:JDK1.4.2,Ant1.6.2,eclipse3.0
一.使用Ant运行Java程序
我们先从简单的Hello学起,目录结构如下
project--
|src--
| |--org.ant.chapter1.Hello
|bin
|build.xml
以后的例子大多采用此目录结构,特例会额外声明
build.xml文件
<?xml version="1.0"?>
<project name="project" default="run">
<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>
<target name="run" depends="compile">
<java classname="org.ant.chapter1.Hello">
</java>
</target>
</project>
从结构来看构建文件很简单,里面的内容大家也一定能够看得懂,可以看出Ant的核心任务就是target,一个Ant文件有多个target组成,而这些target之间,又有相互的依赖关系--depends,运行的时候默认运行project中指定的target.
javac--编译java文件 java--运行java文件
使用eclipse中集成的Ant运行build.xml文件(当然,也可以将ANT_HOME加到Path中,在命令行中运行)
Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
run:
[java] Working directory ignored when same JVM is used.
[java] Could not find org.ant.chapter1.Hello. Make sure you have it in your classpath
[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:166)
[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:705)
[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:177)
[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:83)
[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
[java] at org.apache.tools.ant.Task.perform(Task.java:364)
[java] at org.apache.tools.ant.Target.execute(Target.java:341)
[java] at org.apache.tools.ant.Target.performTasks(Target.java:369)
[java] at org.apache.tools.ant.Project.executeTarget(Project.java:1214)
[java] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:379)
[java] at org.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:135)
BUILD SUCCESSFUL
Total time: 703 milliseconds
,java入门的经典错误,ClassNotDefException,可见是classpath设置问题,而观察得到compile成功运行,所以我们在run-target里面加入classpath的配置
<?xml version="1.0"?>
<project name="project" default="run">
<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>
<target name="run" depends="compile">
<java classname="org.ant.chapter1.Hello">
<classpath path="bin"></classpath>
</java>
</target>
</project>
运行
Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
run:
[java] Hello World!
BUILD SUCCESSFUL
Total time: 672 milliseconds
成功!!第一个Ant应用完成,有人会说:用IDE运行岂不是更简单,但是你要知道运行java程序只是Ant的一个小小的功能,后面我们会看到Ant的更强大的功能!
下一篇文章将介绍java程序运行的扩展及用Ant运行tomcat!
java程序运行的扩展
1.带有参数的应用程序运行
Ant在<java>任务中提供了<arg>元素,<arg>有四种属性value,file,line,path
public class Hello {
public static void main(String[] args) {
System.out.println("Hello " + args[0]);
File file = new File(args[1]);
String[] filename = file.list();
for(int i = 0; i < filename.length; i++) {
System.out.println(filename);
}
}
}
build.xml
<?xml version="1.0"?>
<project name="project" default="run">
<property name="run.classpath" value="bin"></property>
<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>
<target name="run" depends="compile">
<java classname="org.ant.chapter1.Hello">
<classpath path="${run.classpath}"></classpath>
<arg value="Ant"/>
<arg file="D:/rag"/>
</java>
</target>
</project>
Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
run:
[java] Hello Ant
[java] hello.dat
BUILD SUCCESSFUL
Total time: 734 milliseconds
2.控制新的JVM
一般的<java>任务都运行在当前的JVM中,单一些特定的情况下将Ant运行在新的JVM下面,这时只需要将<java>中的一个属性fork设置为true就可以了.
我们知道,java命令提供了许多的运行参数,用于指定JVM的属性,同样在Ant也提供相应的属性,看例子:
<?xml version="1.0"?>
<project name="project" default="run">
<property name="run.classpath" value="bin"></property>
<property name="Search.JVM.extra.args" value="-Xincgc"></property>
<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>
<target name="run" depends="compile">
<java classname="org.ant.chapter1.Hello" fork="true"
maxmemory="64m">
<classpath path="${run.classpath}"></classpath>
<jvmarg line="${Search.JVM.extra.args}"/>
<arg value="Ant"/>
<arg file="D:/rag"/>
</java>
</target>
</project>
3.运行jar文件,使用failonerror处理错误
<java>同样提供了运行jar文件的属性
MANIFEST.MF
Mainfest-Version: 1.0
Created-By: myth
Sealed: false
Main-Class: org.ant.chapter1.Hello
build.xml
<?xml version="1.0"?>
<project name="project" default="run">
<property name="run.classpath" value="bin"></property>
<property name="Search.JVM.extra.args" value="-Xincgc"></property>
<target name="compile">
<javac destdir="bin" srcdir="src"></javac>
</target>
<target name="jar" depends="compile">
<jar destfile="test.jar" update="true"
manifest="MANIFEST.MF">
<fileset dir="bin">
<include name="**/*.class"/>
</fileset>
</jar>
</target>
<target name="run" depends="jar">
<java fork="true" maxmemory="64m" jar="test.jar">
<classpath path="${run.classpath}"></classpath>
<jvmarg line="${Search.JVM.extra.args}"/>
<arg value="Ant"/>
<arg file="D:/rag"/>
</java>
</target>
</project>
Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
jar:
[jar] Updating jar: D:/MyEclipse/workspace/sad/test.jar
run:
[java] Hello Ant
[java] hello.dat
BUILD SUCCESSFUL
Total time: 875 milliseconds
在某些情况下,我们不希望由于一些不重要的任务构建失败,而导致整个构建的失败,所以Ant提供了一个共同的属性-failonerror,多数任务的默认值为failonerror="true",既当此任务构建失败时,失败信息会传递给控制台,并导致build failed,failonerror只支持在新的JVM里运行.
<target name="run" depends="jar">
<java fork="true" maxmemory="64m" jar="test.jar"
failonerror="false" >
<classpath path="${run.classpath}"></classpath>
<jvmarg line="${Search.JVM.extra.args}"/>
<arg value="Ant"/>
<arg file="D:/rag"/>
</java>
</target>
Buildfile: D:/MyEclipse/workspace/sad/build.xml
compile:
jar:
run:
[java] java.lang.NullPointerException
[java] at org.ant.chapter1.Hello.main(Hello.java:27)
[java] Hello Ant
[java] Exception in thread "main"
[java] Java Result: 1
BUILD SUCCESSFUL
Total time: 984 milliseconds
可以看出虽然run构建失败,但是Ant还是执行了,原来的jar文件,并且BUILD SUCCESSFUL!!
使用Ant运行tomcat
Ant使用<exec>任务运行本地程序,先看一个例子:
<?xml version="1.0"?>
<project name="project" default="run">
<target name="run">
<exec executable="cmd">
<arg value="/C a.bat"/>
</exec>
</target>
</project>
a.bat
@echo off
echo Hello >> a.txt
运行完后,会在根目录生成a.txt文件,里面内容为Hello
下面我们来运行tomcat
<?xml version="1.0"?>
<project name="project" default="tomcat-start">
<property name="tomcat.dir" value="c:/Tomcat5"></property>
<target name="tomcat-start">
<exec dir="${tomcat.dir}/bin" executable="cmd">
<env key="CATALINA_HOME" path="${tomcat.dir}"/>
<arg value="/C startup.bat"/>
</exec>
</target>
<target name="tomcat-stop">
<exec dir="${tomcat.dir}/bin" executable="cmd">
<env key="CATALINA_HOME" path="${tomcat.dir}"/>
<arg value="/c shutdown.bat"/>
</exec>
</target>
</project>
- [转载] 无所不能的“蚂蚁”--Ant
- [转载] 无所不能的“蚂蚁”--Ant
- 无所不能的“蚂蚁"
- 无所不能的ant
- 疯狂的蚂蚁----ant
- 【转载】可它却无所不能的飞秋爱好者
- Ant“蚂蚁"的一些使用小结
- 何谓“蚂蚁" ANT
- Eclipse Ant(蚂蚁)
- Ant(蚂蚁搬家)工具
- 无所不能的python!!! [转]
- 无所不能的python
- 无所不能的python
- 无所不能的Monkey
- 《你的iPhone无所不能》
- Android无所不能的Intent
- 无所不能的人生信条
- Ant的入门级教程(1)?ANT 蚂蚁是什么?带有简单使用。
- 元好问诗词集
- 华为发言人傅军称过度劳累与胡新宇死亡确有相关性
- 李煜词全集
- 晏殊词全集
- Eclipse+tomcat的安装配置
- [转载] 无所不能的“蚂蚁”--Ant
- 岳飞词选
- 姜夔词全集
- sql 2000怎样可以让一个数据库用几个磁盘分区呢??
- 文天祥词集
- 元稹诗集
- LCIS
- 刘禹锡诗集
- 杜牧诗集