您的位置:首页 > 产品设计 > UI/UE

[转载] 无所不能的“蚂蚁”--Ant

2006-06-05 23:27 351 查看
说他无所不能,好像有点夸张,但是用过Ant之后,感觉真的是只有想不到没有作不到.Ant,原作者选择他作为软件名字的意思是指"令一个简洁的工具"(AnotherNeatTool),而这个真正的名字现在去很少为人所知

,但这丝毫不影响他成为最优秀的构建工具.
    现在开始我将进入一个"蚂蚁"的世界,通过例子,真真正正去了解他!

    文章参考资料可以到http://www.manning.com/antbook去下载

    Ant的最好学习资料<<使用Ant进行Java开发>>

     Ant的官方网站: http://ant.apache.org/

     Ant的最新版本:Ant1.6.5

     本文所有的例子运行的环境:JDK1.4.2,Ant1.6.2,eclipse3.0

一.使用Ant运行Java程序

我们先从简单的Hello学起,目录结构如下

project--

             |src--

             |        |--org.ant.chapter1.Hello

             |bin       

             |build.xml

以后的例子大多采用此目录结构,特例会额外声明

build.xml文件

<?xmlversion="1.0"?>
<projectname="project"default="run">
 <targetname="compile">
  <javacdestdir="bin"srcdir="src"></javac>
 </target>
 
 <targetname="run"depends="compile">
  <javaclassname="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]WorkingdirectoryignoredwhensameJVMisused.
    [java]Couldnotfindorg.ant.chapter1.Hello.Makesureyouhaveitinyourclasspath
    [java] atorg.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:166)
    [java] atorg.apache.tools.ant.taskdefs.Java.run(Java.java:705)
    [java] atorg.apache.tools.ant.taskdefs.Java.executeJava(Java.java:177)
    [java] atorg.apache.tools.ant.taskdefs.Java.execute(Java.java:83)
    [java] atorg.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
    [java] atorg.apache.tools.ant.Task.perform(Task.java:364)
    [java] atorg.apache.tools.ant.Target.execute(Target.java:341)
    [java] atorg.apache.tools.ant.Target.performTasks(Target.java:369)
    [java] atorg.apache.tools.ant.Project.executeTarget(Project.java:1214)
    [java] atorg.eclipse.ant.internal.ui.antsupport.InternalAntRunner.run(InternalAntRunner.java:379)
    [java] atorg.eclipse.ant.internal.ui.antsupport.InternalAntRunner.main(InternalAntRunner.java:135)
BUILDSUCCESSFUL
Totaltime:703milliseconds         

 

     

,java入门的经典错误,ClassNotDefException,可见是classpath设置问题,而观察得到compile成功运行,所以我们在run-target里面加入classpath的配置

<?xmlversion="1.0"?>
<projectname="project"default="run">
 <targetname="compile">
  <javacdestdir="bin"srcdir="src"></javac>
 </target>
 
 <targetname="run"depends="compile">
  <javaclassname="org.ant.chapter1.Hello">
   <classpathpath="bin"></classpath>
  </java>
 </target>
</project>


运行

Buildfile:D:/MyEclipse/workspace/sad/build.xml
compile:
run:
    [java]HelloWorld!
BUILDSUCCESSFUL
Totaltime:672milliseconds

 

 

成功!!第一个Ant应用完成,有人会说:用IDE运行岂不是更简单,但是你要知道运行java程序只是Ant的一个小小的功能,后面我们会看到Ant的更强大的功能!

 

下一篇文章将介绍java程序运行的扩展及用Ant运行tomcat!

java程序运行的扩展

1.带有参数的应用程序运行

Ant在<java>任务中提供了<arg>元素,<arg>有四种属性value,file,line,path

publicclassHello{

   publicstaticvoidmain(String[]args){
       System.out.println("Hello"+args[0]);     
       Filefile=newFile(args[1]);
       String[]filename=file.list();
       
       for(inti=0;i<filename.length;i++){
           System.out.println(filename);
       }
   }
}

 

build.xml

<?xmlversion="1.0"?>
<projectname="project"default="run">
 <propertyname="run.classpath"value="bin"></property>
 
 <targetname="compile">
  <javacdestdir="bin"srcdir="src"></javac>
 </target>
 
 <targetname="run"depends="compile">
  <javaclassname="org.ant.chapter1.Hello">
   <classpathpath="${run.classpath}"></classpath>
   <argvalue="Ant"/>
   <argfile="D:/rag"/>
  </java>
 </target>
</project>

Buildfile:D:/MyEclipse/workspace/sad/build.xml
compile:
run:
    [java]HelloAnt
    [java]hello.dat
BUILDSUCCESSFUL
Totaltime:734milliseconds

 

2.控制新的JVM

一般的<java>任务都运行在当前的JVM中,单一些特定的情况下将Ant运行在新的JVM下面,这时只需要将<java>中的一个属性fork设置为true就可以了.

我们知道,java命令提供了许多的运行参数,用于指定JVM的属性,同样在Ant也提供相应的属性,看例子:

<?xmlversion="1.0"?>
<projectname="project"default="run">
 <propertyname="run.classpath"value="bin"></property>
 <propertyname="Search.JVM.extra.args"value="-Xincgc"></property>
 
 <targetname="compile">
  <javacdestdir="bin"srcdir="src"></javac>
 </target>
 
 <targetname="run"depends="compile">
  <javaclassname="org.ant.chapter1.Hello"fork="true"
   maxmemory="64m">
   <classpathpath="${run.classpath}"></classpath>
   <jvmargline="${Search.JVM.extra.args}"/>
   <argvalue="Ant"/>
   <argfile="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

<?xmlversion="1.0"?>
<projectname="project"default="run">
 <propertyname="run.classpath"value="bin"></property>
 <propertyname="Search.JVM.extra.args"value="-Xincgc"></property>
 
 <targetname="compile">
  <javacdestdir="bin"srcdir="src"></javac>
 </target>
 
 <targetname="jar"depends="compile">
  <jardestfile="test.jar"update="true"
   manifest="MANIFEST.MF">
   <filesetdir="bin">
    <includename="**/*.class"/>
   </fileset>
  </jar>
 </target>
 
 <targetname="run"depends="jar">
  <javafork="true"maxmemory="64m"jar="test.jar">
   <classpathpath="${run.classpath}"></classpath>
   <jvmargline="${Search.JVM.extra.args}"/>
   <argvalue="Ant"/>
   <argfile="D:/rag"/>
  </java>
 </target>
</project>

 

Buildfile:D:/MyEclipse/workspace/sad/build.xml
compile:
jar:
     [jar]Updatingjar:D:/MyEclipse/workspace/sad/test.jar
run:
    [java]HelloAnt
    [java]hello.dat
BUILDSUCCESSFUL
Totaltime:875milliseconds

在某些情况下,我们不希望由于一些不重要的任务构建失败,而导致整个构建的失败,所以Ant提供了一个共同的属性-failonerror,多数任务的默认值为failonerror="true",既当此任务构建失败时,失败信息会传递给控制台,并导致buildfailed,failonerror只支持在新的JVM里运行.

 <targetname="run"depends="jar">
  <javafork="true"maxmemory="64m"jar="test.jar"
   failonerror="false">
   <classpathpath="${run.classpath}"></classpath>
   <jvmargline="${Search.JVM.extra.args}"/>
   <argvalue="Ant"/>
   <argfile="D:/rag"/>
  </java>
 </target>

 

Buildfile:D:/MyEclipse/workspace/sad/build.xml
compile:
jar:
run:
    [java]java.lang.NullPointerException
    [java]atorg.ant.chapter1.Hello.main(Hello.java:27)
    [java]HelloAnt
    [java]Exceptioninthread"main"
    [java]JavaResult:1
BUILDSUCCESSFUL
Totaltime:984milliseconds

可以看出虽然run构建失败,但是Ant还是执行了,原来的jar文件,并且BUILDSUCCESSFUL!!

 

使用Ant运行tomcat

Ant使用<exec>任务运行本地程序,先看一个例子:

<?xmlversion="1.0"?>
<projectname="project"default="run">
 <targetname="run">
  <execexecutable="cmd">
   <argvalue="/Ca.bat"/>
  </exec>
 </target>
</project>

a.bat

@echooff
echoHello>>a.txt

运行完后,会在根目录生成a.txt文件,里面内容为Hello

 

下面我们来运行tomcat

<?xmlversion="1.0"?>
<projectname="project"default="tomcat-start">
 <propertyname="tomcat.dir"value="c:/Tomcat5"></property>
 
 <targetname="tomcat-start">
  <execdir="${tomcat.dir}/bin"executable="cmd">
   <envkey="CATALINA_HOME"path="${tomcat.dir}"/>
   <argvalue="/Cstartup.bat"/>
  </exec>
 </target>

 <targetname="tomcat-stop">
  <execdir="${tomcat.dir}/bin"executable="cmd">
   <envkey="CATALINA_HOME"path="${tomcat.dir}"/>
   <argvalue="/cshutdown.bat"/>
  </exec>
 </target>
</project>

 努力...
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java ant jar path build jvm