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
自动化工具
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
相关文章推荐
- 【转载】ant中copy操作学习心得
- javascript的匿名函数的理解(转载学习)
- 【转载】Java学习过程应该深入理解的一些重点
- Ant学习总结(1)对exec的理解
- ant的build.xml文件解析(转载方便学习)
- ant入门基础教程(转载方便学习)
- javascript的匿名函数的理解(转载学习)
- 转载:Ant学习笔记——自己构建Ant编译环境
- 转载:Contour Detection and Hierarchical Image Segmentation 图像边缘分割算法的学习与理解
- Ant学习文章转载1
- Ant学习文章转载1
- Java学习记录(记录一部分Java和C++区别和Java里一些比较重要的概念)--稍后会转到新浪博客
- 【转载】Spark学习——spark中的几个概念的理解及参数配置
- struts傻瓜式学习(一天篇) (2)(转载)
- 理解XForm——学习IBM DW的资料
- 计算机科学与技术学习心得之计算机理论的一个核心问题--计算数学基础(转载)
- SWT学习笔记(2)——转载倪大鹏的“SWT:AWT和SWING的强大竞争者”
- 学习JAVA的步骤(转载)
- 我的DDK学习经验(转载)
- 学习Shark的一些理解