1、设定私钥库
2、如果项目引用了第三方库的话,只需要在项目根目录创建libs文件夹并将其放入即可。
1
2
3
4
5
|
<?
xml
version = "1.0" encoding = "GBK" ?>
<
project
default = " targetname" >
<
target
name = "name" >
</
target
>
</
project
>
|
project是生成文件的根元素,表示一个工程;
target是project的子元素,表示一个任务;一个project中可以定义多个target元素,表示多个任务;
default属性表示默认执行的target,如果ant命令没有指定target,则执行default的target;
ant targetname;则会执行此target,而忽略default设置的target;
注意:不能有两个相同的targetname;
代码举例:创建并删除hello目录;
1
2
3
4
5
6
7
8
9
10
|
<?
xml
version = "1.0" encoding = "gbk" ?>
<
project
default = "delete" >
<
property
name = "name" value = "xiazdong" />
<
target
name = "delete" depends = "mkdir" >
<
delete
dir = "${name}" />
</
target
>
<
target
name = "mkdir" >
<
mkdir
dir = "${name}" />
</
target
>
</
project
>
|
代码举例:一般项目中的ant结构
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<
project
default
=
"init"
>
<
property
name
=
"src"
value
=
"src"
/>
<
property
name
=
"classes"
value
=
"classes"
/>
<
property
name
=
"dest"
value
=
"dest"
/>
<
path
id
=
"classpath"
>
<
pathelement
path
=
"${classes}"
/>
</
path
>
<
target
name
=
"help"
>
<
echo
>help -打印帮助信息</
echo
>
<
echo
>compile -编译java源文件</
echo
>
<
echo
>run -运行程序</
echo
>
<
echo
>build -打成jar包</
echo
>
<
echo
>clean -清楚全部编译生成文件</
echo
>
</
target
>
<
target
name
=
"compile"
>
<
delete
dir
=
"${classes}"
/>
<
mkdir
dir
=
"${classes}"
/>
<
javac
srcdir
=
"${src}"
destdir
=
"${classes}"
/>
</
target
>
<
target
name
=
"run"
depends
=
"compile"
>
<
java
classname
=
"org.xiazdong.Test"
fork
=
"yes"
>
<
classpath
path
=
"${classes}"
/>
</
java
>
</
target
>
<
target
name
=
"build"
depends
=
"run"
>
<
delete
dir
=
"${dest}"
/>
<
mkdir
dir
=
"${dest}"
/>
<
jar
destfile
=
"${dest}/Test.jar"
basedir
=
"${classes}"
>
<
manifest
>
<
attribute
name
=
"Main-Class"
value
=
"org.xiazdong.Test"
/>
</
manifest
>
</
jar
>
</
target
>
<
target
name
=
"clean"
>
<
delete
dir
=
"${classes}"
/>
<
delete
dir
=
"${dest}"
/>
</
target
>
</
project
>
|
总结一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
<?
xml
version
=
"1.0"
encoding
=
"GBK"
?>
<
project
name
=
"Test"
default
=
""
basedir
=
"."
>
<
property
name
=
"src"
value
=
"${basedir}\src"
/>
<
property
file
=
"${basedir}\a.properties"
/>
<!--
path用法
1.id属性表示编号,用于被引用
-->
<
path
id
=
"classpath"
>
<!--
pathelement的用法
1.path表示多个目录,用“;”隔开目录
2.location表示一个目录
-->
<
pathelement
path
=
"lib;src"
/>
<
pathelement
location
=
"lib"
/>
<!--
dirset的用法
1.dir属性指定根目录
2.子元素<include name=" "/>表示包含的目录
3.子元素<exclude name=" "/>表示不包含的目录
-->
<
dirset
dir
=
"lib"
>
<
include
name
=
"**/*Test*"
/>
<
exclude
name
=
"**/class"
/>
</
dirset
>
<!--
filelist的用法
1.dir属性指定根路径
2.files属性指定文件名的列表,用","隔开
-->
<
filelist
dir
=
"lib"
files
=
"a.xml,b.xml"
/>
<!--
fileset用法
1.dir属性指出根路径
2.子元素<include name=" "/>指定包含的文件名
-->
<
fileset
dir
=
"lib"
>
<
include
name
=
"**/*.jar"
/>
</
fileset
>
</
path
>
<!--
target用法
1.表示任务,子元素为各种task的集合;
-->
<
target
name
=
"target1"
>
<!--
javac用法
1.srcdir表示java文件的目录
2.destdir表示class文件的保存目录
-->
<
javac
srcdir
=
"src"
destdir
=
"bin"
>
<!--
classpath用法
1.refid引用前面的path指定的路径
-->
<
classpath
refid
=
"classpath"
/>
</
javac
>
<!--
java用法
1.classname表示要运行的类
2.fork="yes"一定要写上!!
-->
<
java
classname
=
"Test"
fork
=
"yes"
>
<
classpath
refid
=
"classpath"
/>
<!--
arg表示指定的参数
-->
<
arg
value
=
"a b c"
/>
</
java
>
<!--
echo表示输出
-->
<
echo
>Hello world</
echo
>
<!--
copy表示复制文件
delete表示删除文件
mkdir表示创建目录
move表示移动文件
-->
<
copy
file
=
"src.txt"
tofile
=
"dest.txt"
/>
<
delete
dir
=
"src"
/>
<
mkdir
dir
=
"src"
/>
<
move
file
=
"src.txt"
tofile
=
"dest.txt"
/>
</
target
>
</
project
>
|
假设我们定义一个函数:
我们可以通过以下方法来执行这个方法
将这些移到ant中:
将to do something使用echo标签输出,然后使用<test/>调用这个宏。
运行ant -f test.xml结果:
标签macrodef:声明这是一个宏,name="test"来告诉ant这个宏的名字叫做test。之后我们调用这个宏就可以使用</test>。
标签attribute:声明这个宏所需要的参数。
标签sequential:声明这个宏需要执行的实体。
上面的例子中我们请求传入一个参数arg,并给这个arg设置了默认值"testssss",接下来我们希望调用这个宏的时候传递这个参数,并且输出这个参数。如下:
运行结果:
我们将arg作为test标签的属性名传入进入,而属性arg的内容就是arg的内容。我们通过@{参数}来调用这个参数的内容。
假定我们希望我们的函数是这样的:
也就是我们的会调用另一个函数print,这个在ant宏定义中是这样使用的:
我们通过element函数来声明我们需要使用一个名字叫做print的函数。optional用来说明这个函数是否是必须存在的。也就是上面的程序加上element那一行是可以正常使用的。
尝试把optional改为no试试??自己试试吧。
我们这里声明了使用函数print,其实这是一个回调,为什么呢?一般来说我们会在<sequential>中使用这个函数。那么这个函数是需要在调用test的时候实现的。如果optional为no那么这个函数就是必须实现的,如果不实现是会报错的。如下:
我们在调用test时通过一个标签对来实现了print函数。其实际的执行就是按照sequential的顺序执行:
首先输出:arg is : @{arg}
其次执行我们的 :print,当然我们的print存在的话。
Ok,编写个脚本试试吧!下面再给大家一个例子:
不使用MacroDef的情况下,编译和打包math和io等目录:
<target name="build_math" depends="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的情况下,编译和打包math和io等目录:
———————————————————————————————————————
<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>
作者:jason0539
微博:http://weibo.com/2553717707
博客:http://blog.csdn.net/jason0539(转载请说明出处)