您的位置:首页 > 移动开发 > Android开发

Android脚本打包之ant语法

2013-03-21 21:44 246 查看
以下内容整理自网上相关文章,详情见最后链接:

1.ant的编译文件默认为build.xml

2.build.xml的根节点为<project>

<project name="AntStudy" default="init" basedir=".">
name为工程名称;

default为默认的target,就是任务;

basedir就是基路径。一般为"."

3.property可以定义变量

<property name="test" value="shit" />
引用的时候这么引用${test}

如果变量是路径的话,则可以这么定义:

<property name="src" value="src" />

这么定义就可以不用担心"\"和"/"的问题了。

4.定义target:

<target name="compile" depends="init"><!--other command--></target>

name的值为target的名称,可以在编译的时候指定是完成哪个target,

否则采用project那里定义的default。

depends则定义了依赖关系,值为其他target的name。多个依赖关系用","隔开,

顺序执行完定义的依赖关系,才会执行这个target。

target在build.xml中定义的顺序无所谓,但是depends中的顺序必须正确。

5.编译源代码:

<javac srcdir="src" destdir="classes">
     <classpath> 
             <fileset dir="lib"> 
                 <include name="**/*.jar"/> 
             </fileset>
         </classpath> 
   </javac>
这个标签自动寻找src中以.java为扩展名的文件,并且调用javac命令。

这个任务有个特点,它仅仅编译那些需要编译的源文件。如果没有更新,就不需要编译,

速度就加快。

编译文件和ant使用的同一个jvm,大大减少资源浪费。

还可以指定classpath。classpath中指定文件夹,然后指定包含的文件的规则。

6.创建jar文件:

<jar destfile="antstudy.jar" basedir="classes">
<manifest>
   <attribute name="Main-Class" value="bean.ant.TestAnt" />
</manifest>
   </jar>


manifest指定manifest中文件的属性,比如可以指定Main-Class

7.创建目录:

<mkdir dir="classes" />
创建dir的文件夹。

8.删除目录:

<delete dir="classes" />


删除classes文件夹

9.拷贝文件:

<copy todir="${backup.dir}"> 
        <fileset dir="${classes.dir}"/> 
    </copy>


把fileset文件夹下面的所有文件拷贝到 backup.dir

10.执行一个类:

<java dir="${build}" classname="bean.ant.TestAnt" fork="true" />
dir为工作文件夹,classname为类名。fork要设置为true。因为你编译放class的文件夹

正在使用,所以要新打开一个虚拟机。

11.生成javadoc:

<javadoc sourcepath="${src}" destdir="${docs}/javadoc" encoding="utf-8" charset="utf-8" 
windowtitle="Spring Framework" source="1.5" access="package" author="true" version="true" 
use="true" defaultexcludes="true">
<doctitle>
   <![CDATA[<h1>Ant Test</h1>]]></doctitle>
<bottom>
   <![CDATA[<i>Copyright (c) 2002-2007</i>]]></bottom>
<packageset dir="${src}">
   <include name="bean/ant/**" />
</packageset>
</javadoc>


encoding="utf-8" charset="utf-8" 都需要,否则javadoc是乱码。

packageset一定要设定,否则找不到源码,格式可以是**.意思是所有源码。

12.path的使用,可以定义path对象,在其他地方可以直接复用。

<path id="1"> 
   <pathelement location="."/> 
   <pathelement location="./lib/junit.jar"/> 
</path>
<path id="2"> 
   <fileset dir="lib"> 
   <include name="**/*.jar"/> 
   </fileset> 
</path>
<javac srcdir="./src" destdir="./classes"> 
   <classpath refid="1"/> 
</javac>
<javac srcdir="./src" destdir="./classes"> 
      <classpath refid="1"> 
          <pathelement location="."/> 
          <pathelement location="./lib/junit.jar"/> 
      </classpath> 
</javac>


14.自定义宏MacroDef:

在Ant中是非常实用的,它的作用相当于java里面的为防止代码重复而提取的公共方法。

<target name="build_math" depands="base">
	<echo message="... building jck-api-math-cases  now ..."/>
	<javac debug="false"  destdir="bin" source="1.5" target="1.5">
		<src path="./java_math"/>
		<classpath refid="java_jck.classpath"/>
	</javac>
</target>

<target name="make_math" depends="build_math">
	<echo message="... make math jar ...."></echo>
	<jar jarfile="math.jar" basedir="./bin"/>
	<move file="./math.jar" tofile="./lex/math.jar" overwrite="true"/>
</target>

<target name="build_io" depands="base">
	……
</target>

<target name="make_io" depends="build_io">
	……
</target>
……


但是用宏的话,就可以浓缩成以下代码

<macrodef name="dealWithTestCases">            //macrodef的定义,定义了name属性
	<attribute name="tarName" />              //参数定义
	<attribute name="srcPath" />
	<!--element name="dex-elements"/-->
	<sequential>               //实际执行的内容在<sequential>里
		<echo message="... building jck-api-@{tarName}-cases  now ...."/>
		<javac debug="false"  destdir="bin" source="1.5" target="1.5" includeantruntime="on">
			<src path="./@{srcPath}"/>
			<classpath refid="java_jck.classpath"/>
			<excludesfile name="exclude.@{tarName}"/>
		</javac>
		<echo message="... make @{tarName} jar ..."></echo>
		<jar jarfile="@{tarName}.jar" basedir="./bin"/>
		<move file="./@{tarName}.jar" tofile="./lex/@{tarName}.jar" overwrite="true"/>
	</sequential>
</macrodef>

<target name="lex" depands="base">
	<dealWithTestCases tarName="math" srcPath="./java_math"/>     //外部调用宏
	<dealWithTestCases tarName="io" srcPath="./java_io"/>	
	……	
</target>


13.单元测试:

<junit printsummary="yes">
   <classpath refid="testpath" />
   <batchtest>
    <fileset dir="${test}">
     <include name="**/*Test.java" />
    </fileset>
   </batchtest>
</junit>


batchtest为批量test,需要设置符合条件的类名称。

在进行单元测试之前必须先进行编译。

配置的classpath指向一个testpath的path,就是上面哪一条里面讲的。

原文链接:

点击打开链接 介绍语法的一篇文章

点击打开链接 也介绍语法的一篇文章

点击打开链接

博客园的一篇介绍ant语法的文章,比较详细,格式清晰
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: