您的位置:首页 > 其它

Ant学习理解(稍后会转载到新浪博客)

2015-01-19 14:30 337 查看
Ant
自动化工具

make是一个命令工具,它解释makefile中的指令

makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件需要后编译,那些文件需要重新编译,甚至于进行跟复杂的功能操作,也可以执行一些操作系统命令

Ant is a Java-based build tool (ant是一个以java为基础的构建工具),it is kind of like make (功能和make差不多)

那为什么我们有make的情况下还要用ant了?

Ant官网上的解释主要是说Make工具自身就是shell-based的,这样就导致了跨平台使用的限制。Ant是通过Java这种通过虚拟机跨平台语言扩展的,并且ant是基于xml的而非shell(ant里面也支持调用OS相关的shell),所以支持跨平台的使用。(但在我看来使用什么工具好,还是需要看自己实际项目哪一种更方便,编写在Unix下makefile(本人没有在Unix下编写makefile经验,看到网上的一些使用心得)会遇到一些奇葩问题,也是shell-based的,需要对shell有一定理解才便于学习,学习难度的确比ant这个基于java的xml风格要难。如果没有使用Unix经验,在Windows下使用Eclipse开发Java项目,使用ant来写自动化工具容易上手些)

网络上(http://book.51cto.com/art/201011/234363.htm)也有提到ant依赖管理的问题,这里提到了Maven(一个软件项目管理及自动构建工具,基于项目对象模型(POM))

Ant学习篇:

用ant来完成编译打包执行Java程序和执行bat的例子:

HelloWorld.java

package hello;

public class HelloWorld {

public static voidmain(String[] args){

System.out.println("Ant: Hello World");

}

}

AntCheckJavaVersion.java

package hello;

public class AntCheckJavaVersion{

public static void main(String[] args){

String version = System.getProperty("java.version");

System.out.println("java.version = " + version);

}

}

antbat.bat

@echo test ant bat call

@echo parameter1 = %1

build.xml

<!-- 项目属性-->

<project name="HelloWorld"basedir="." default="main">

<!-- 设定一些路径变量属性-->

<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="hello.HelloWorld"/>

<!-- target 是一系列task的集合,用于实现特定任务,在console界面通过ant targetname调用执行-->

<!-- 清理生成文件目录-->

<target name="clean">

<deletedir="${build.dir}"/>

</target>

<!-- 编译java文件成class文件到特定文件目录-->

<target name="compile">

<mkdirdir="${classes.dir}"/>

<javacsrcdir="${src.dir}" destdir="${classes.dir}"includeAntRuntime="false"/>

</target>

<!--打包所有class文件-->

<target name="jar"depends="compile">

<mkdirdir="${jar.dir}"/>

<jardestfile="${jar.dir}/${ant.project.name}.jar"basedir="${classes.dir}">

<manifest>

<attributename="Main-Class" value="${main-class}"/>

</manifest>

</jar>

</target>

<!--运行程序-->

<target name="run" depends="jar">

<javafork="true" jar="${jar.dir}/${ant.project.name}.jar"/>

</target>

<!--清理生成目录并重新生成文件-->

<target name="clean-build"depends="clean,jar"/>

<!--清理生成目录并运行main函数-->

<target name="main"depends="clean,run"/>

<!--测试ant的Java扩展使用

清理生成文件并调用AntCheckJavaVersion.java类来检查java版本-->

<target name="CheckJV"depends="clean,jar">

<!--task是一小段可执行代码,之前说到ant是从java扩展而来的,这里测试一下自己写的java代码在ant中的执行-->

<!-- ant里有很多自己写好的task供我们使用,通过这些功能使用可以实现我们想要的特定项目构建-->

<java taskname="AntCheckJavaVersion" classname="hello.AntCheckJavaVersion" classpath="${classes.dir}" fork="true" failonerror="true"/>

</target>

<!-- ant调用bat并传参的使用-->

<target name="callbat">

<exec executable="cmd">

<arg value="/c"/>

<arg value="antbat.bat th"/>

</exec>

</target>

</project>

更多ant使用学习见官网:

http://ant.apache.org/manual/index.html

下面还有个Ant使用很详细的博客:

http://handsomeliuyang.iteye.com/blog/1156070#bc2361792
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: