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

转载 2006年06月03日 13:04:00
说他无所不能,好像有点夸张,但是用过Ant之后,感觉真的是只有想不到没有作不到.Ant,原作者选择他作为软件名字的意思是指"令一个简洁的工具"(Another Neat Tool),而这个真正的名字现在去很少为人所知,但这丝毫不影响他成为最优秀的构建工具.

     现在开始我将进入一个"蚂蚁"的世界,通过例子,真真正正去了解他!

     文章参考资料可以到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>

 

相关文章推荐

ply 蚂蚁模型 ant

  • 2015-12-17 17:06
  • 24KB
  • 下载

小蚂蚁Ant的使用指南

  • 2008-10-05 18:56
  • 414KB
  • 下载

Eclipse Ant(蚂蚁)

功能描述:      ant主要用来『编译,测试,打包,部署』如何使用+ project   - name            项目名称  - default...

Ant(蚂蚁)使用指南

  • 2008-09-15 19:48
  • 414KB
  • 下载

bzoj2023【Usaco2005 Nov】Ant Counting 数蚂蚁

滚动数组+前缀和优化DP

蚂蚁与蚱蜢(The Ant and the Grasshopper)

当我还是一个小孩的时候,我背诵了La Fontaine写的一些寓言,从各个寓言中得出的教训都详细地为我作了解释。我学到的之一便是《The Ant and theGrasshopper》,它被修改用于告...

Bzoj[2023/1630]: [Usaco2005 Nov]Ant Counting 数蚂蚁 DP+滚动数组

2023: [Usaco2005 Nov]Ant Counting 数蚂蚁 Time Limit: 4 Sec  Memory Limit: 64 MB Submit: 180  Solv...

从蚂蚁的觅食过程看团队研发(转载)

我常常想,我们整天工作着,忙碌着,日复一日,年复一年,也看着别人和我们一样在工作着,忙碌着,我们甚至没时间停下来思考,你忙,我忙,他也忙,看起来,我们的团队,我们的部门就像一群忙忙碌碌的蚂蚁。其实,我...

权威机构内部预测2015年移动十大趋势:手机将无所不能

全球移动解决方案提供商 Golden Gekko 的内部预测。在研读大量领先分析师观点基础上,该机构又与谷歌、Facebook、微软、苹果及大量零售金融汽车医疗保健行业企业交流探讨,写下这份《2015...

JBL无所不能与IPhone4、IPad2的完美盛宴

期待以久JBL白版终于到货了,由于水货的供电参数是110V~200V,行货是110~220V,所以本人选择了行货,因为水货的供电和国内的输入电压不符,时间用久了会影响小J寿命。经过测试后本人发现,用J...
  • dotfun
  • dotfun
  • 2011-06-24 11:32
  • 1247
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)