-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbuild.xml
More file actions
132 lines (116 loc) · 7.16 KB
/
build.xml
File metadata and controls
132 lines (116 loc) · 7.16 KB
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<?xml version="1.0" encoding="UTF-8"?>
<project name="demo" default="all" xmlns:artifact="urn:maven-artifact-ant">
<description>
</description>
<property file="build.properties" />
<target name="init_maven">
<!--
remember to set M2_REPO before use this build.xml, for example in eclispe:
"Window→Preferences→Ant→Runtime", add a new property named "M2_REPO" and set it value point to the path of your maven
local repository; Or you can set it in build.properties. You need do one (and only one) of them.
-->
<!--
在ant中使用maven-ant-tasks,就需要装载maven-ant-tasks的jar包,方法有两种,
一种是直接将maven-ant-tasks-2.0.9.jar放到ant的lib下,自然就可以直接使用。
但是个人感觉不怎么喜欢这种方式,我采用的是第二种,在ant的build.xml文件中装载
-->
<path id="maven-ant-tasks.classpath" path="${M2_REPO}/org/apache/maven/maven-ant-tasks/2.0.9/maven-ant-tasks-2.0.9.jar" />
<typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant" classpathref="maven-ant-tasks.classpath" />
<!--
artifact:pom任务装载了整个pom,因此在后面可以访问到pom的信息;
比如${maven.project.build.sourceDirectory}是java源代码目录,${maven.project.build.finalName}是最终的名称
-->
<artifact:pom id="maven.project" file="pom.xml" />
<artifact:dependencies pathId="classpath.build" filesetid="maven.fileset.build">
<pom refid="maven.project" />
</artifact:dependencies>
<artifact:dependencies pathId="classpath.runtime" filesetid="maven.fileset.runtime" useScope="runtime">
<pom refid="maven.project" />
</artifact:dependencies>
</target>
<target name="all" depends="init_path" description="do all">
<!-- <target name="all" depends="init_path, compile, jar, package, zip" description="do all"> -->
<echo>begin to do all target to build the result package.</echo>
</target>
<target name="maven_info" depends="init_maven">
<echo>Maven build directory is ${maven.project.build.directory}</echo>
<echo>Maven build finalName is ${maven.project.build.finalName}</echo>
<echo>Maven build sourceDirectory directory is ${maven.project.build.sourceDirectory}</echo>
<echo>Maven build outputDirectory directory is ${maven.project.build.outputDirectory}</echo>
<echo>Maven build scriptSourceDirectory directory is ${maven.project.build.testSourceDirectory}</echo>
<echo>Maven build testOutputDirectory directory is ${maven.project.build.testOutputDirectory}</echo>
<echo>Maven build scriptSourceDirectory directory is ${maven.project.build.scriptSourceDirectory}</echo>
<echo>Maven build resourceDirectory directory is ${maven.project.build.resources}</echo>
<property name="target.jar.name" value="${maven.project.build.directory}/${maven.project.build.finalName}.jar" />
<echo>Maven build scriptSourceDirectory directory is ${target.jar.name}</echo>
</target>
<target name="clean" depends="init_maven">
<echo>clean build directory : ${maven.project.build.directory}</echo>
<delete dir="${maven.project.build.directory}" includes="**/*" />
</target>
<target name="init_path" depends="maven_info, clean">
<echo>make dir for java compile: ${maven.project.build.outputDirectory}</echo>
<mkdir dir="${maven.project.build.outputDirectory}" />
</target>
<!--
我们的项目完全遵循maven的标准做法,然后ant通过访问pom来得到相关的路径信息和classpath信息,完美结合。
target copyResource 完成了将resource copy到outputDirectory的任务,这里的resource都是classpath resource。
注: 这个有个问题,就是我没有找到通过pom得到resouce目录的方法,${maven.project.build.resources 只能得到pom文件中<resources/>,
对于里面包含的<resource>不知道该用什么方式来访问
-->
<target name="compile" description="description" depends="init_maven">
<javac srcdir="${maven.project.build.sourceDirectory}" destdir="${maven.project.build.outputDirectory}" classpathref="classpath.build" />
</target>
<target name="copyResource" depends="init_maven">
<copy todir="${maven.project.build.outputDirectory}">
<fileset dir="src/main/resources">
</fileset>
</copy>
</target>
<!--
和compile类似,标准的ant jar,然后通过访问pom来得到相关的路径信息和打包文件名。
注意这里的文件名和路径和maven的做法一致,也就是说和执行maven的compile命令结果是一样的
-->
<target name="jar" depends="compile, copyResource">
<delete file="${maven.project.build.directory}/${maven.project.build.finalName}.jar" failonerror="false" />
<jar destfile="${maven.project.build.directory}/${maven.project.build.finalName}.jar" basedir="${maven.project.build.outputDirectory}">
</jar>
</target>
<target name="package" depends="package_prepare, copyLib, copyConfig, copyBin">
</target>
<target name="package_prepare" depends="init_maven">
<echo>clean package directory : ${maven.project.build.directory}/${path.package}</echo>
<delete dir="${maven.project.build.directory}/${path.package}" />
<mkdir dir="${maven.project.build.directory}/${path.package}" />
<mkdir dir="${maven.project.build.directory}/${path.package}/${path.target.name}" />
<mkdir dir="${maven.project.build.directory}/${path.package}/${path.target.name}/${path.package.lib}" />
<mkdir dir="${maven.project.build.directory}/${path.package}/${path.target.name}/${path.package.config}" />
<mkdir dir="${maven.project.build.directory}/${path.package}/${path.target.name}/${path.package.log}" />
</target>
<target name="copyLib" depends="init_maven">
<copy todir="${maven.project.build.directory}/${path.package}/${path.target.name}/${path.package.lib}">
<fileset refid="maven.fileset.runtime" />
<mapper type="flatten" />
</copy>
<copy todir="${maven.project.build.directory}/${path.package}/${path.target.name}/${path.package.lib}"
file="${maven.project.build.directory}/${maven.project.build.finalName}.jar">
</copy>
</target>
<target name="copyConfig" depends="init_maven">
<copy todir="${maven.project.build.directory}/${path.package}/${path.target.name}/${path.package.config}">
<fileset dir="src/main/config">
</fileset>
</copy>
</target>
<target name="copyBin" depends="init_maven">
<copy todir="${maven.project.build.directory}/${path.package}/${path.target.name}/${path.package.bin}">
<fileset dir="src/main/bin">
</fileset>
</copy>
</target>
<target name="zip" depends="init_maven">
<zip destfile="${maven.project.build.directory}/${path.package}/${path.target.name}.zip">
<fileset dir="${maven.project.build.directory}/${path.package}/${path.target.name}"></fileset>
</zip>
</target>
</project>