-
Notifications
You must be signed in to change notification settings - Fork 0
/
build.xml
226 lines (199 loc) · 6.9 KB
/
build.xml
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<project name="mlms" default="help" basedir="."
xmlns:ivy="antlib:org.apache.ivy.ant"
xmlns:jacoco="antlib:org.jacoco.ant">
<target name="help">
<echo>
Development Targets
build.src: Compile production code
clean: Remove all intermediate files and folders
clean-ivy: Clean the ivy cache (in case some dependencies
are not retrieved after modifying build.xml or ivy.xml).
test: Run JUnit test cases
coverage: Produce test coverage report
javadoc: Generate javadoc for production code
Execution targets
gui: Run the MLMS application.
Aram Al-Sabti, 2017.
</echo>
</target>
<!-- Folder properties -->
<property name="src.dir" value="src" />
<property name="test.dir" value="test" />
<property name="lib.dir" value="lib" />
<property name="lib-core.dir" value="lib-core" />
<property name="bin.dir" value="bin" />
<!-- Natives and resources (in future, add natives by pattern-matching) -->
<property name="jmtp-natives.dir" value="${lib-core.dir}/jmtp-natives" />
<property name="resource.dir" value="resources" />
<property name="javadoc.dir" value="javadoc" />
<!-- JaCoCo Coverage analysis -->
<taskdef uri="antlib:org.jacoco.ant"
resource="org/jacoco/ant/antlib.xml">
<classpath path="lib-core/jacocoant.jar"/>
</taskdef>
<property name="test.output.directory" value="TEST-RESULT"/>
<property name="jacoco.report.dir" value="${test.output.directory}/report" />
<property name="jacoco.exec" value="${test.output.directory}/jacoco.exec" />
<!-- Paths used for compilation and run -->
<path id="lib.path.id">
<fileset dir="${lib.dir}" />
<fileset dir="${lib-core.dir}" />
</path>
<path id="run.path.id">
<path refid="lib.path.id" />
<path location="${bin.dir}" />
</path>
<!-- House holding -->
<target name="clean" depends="clean-ivy"
description="--> Clean everything, remove all .class and lib files">
<delete dir="${bin.dir}"/>
<delete dir="${lib.dir}"/>
<delete dir="${test.output.directory}"/>
<delete dir="${javadoc.dir}"/>
</target>
<target name="clean-ivy" description="--> Only clean the ivy cache">
<ivy:cleancache/>
</target>
<target name="prepare">
<mkdir dir="${bin.dir}"/>
<mkdir dir="${lib.dir}"/>
<mkdir dir="${test.output.directory}"/>
<mkdir dir="${javadoc.dir}"/>
</target>
<!-- Ivy dependency management -->
<target name="resolve"
description="--> Retrieve dependencies with Ivy">
<ivy:retrieve conf="natives"
pattern="lib/[conf]/[artifact](-[classifier]).[ext]"/>
<!-- Places all dependencies marked as "natives"
in the folder corresponding to the pattern -->
<ivy:retrieve conf="default, code-and-javadoc, optional"/>
<!-- Place the rest in the lib folder -->
</target>
<target name="report" depends="resolve"
description="--> Generates a report of dependencies for Ivy">
<ivy:report todir="${bin.dir}"/>
</target>
<!-- Compilation tasks -->
<target name="build.src" depends="prepare,resolve"
description="--> Compile production code source files">
<javac srcdir="${src.dir}"
destdir="${bin.dir}"
debug="on"
classpathref="lib.path.id"
includeAntRuntime="false">
</javac>
</target>
<target name="build.test" depends="build.src"
description="--> Compile test code source files">
<javac srcdir="${test.dir}"
destdir="${bin.dir}"
debug="on"
classpathref="lib.path.id"
includeAntRuntime="false">
</javac>
</target>
<!-- Resources to be put into their proper place -->
<target name="copy.resource">
<!-- Uncomment this when logging is implemented
<copy file="${resource.dir}/log4j.properties" todir="${bin.dir}"/>
-->
<!-- <copy file="${resource.dir}/javax.usb.properties" todir="${bin.dir}"/> -->
</target>
<!-- Build everything -->
<target name="build.all"
depends="build.test,copy.resource"
description="--> Build everything"/>
<!-- JUnit testing -->
<target name="test" depends="build.all"
description="--> Run JUnit unit and integration tests">
<junit printsummary="yes" fork="yes"
forkmode="once"
haltonfailure="yes">
<formatter type="plain"/>
<batchtest fork="yes" todir="${test.output.directory}">
<fileset dir="${test.dir}">
<include name="**/Test*.java"/>
</fileset>
</batchtest>
<classpath refid="run.path.id"/>
</junit>
</target>
<!-- Run JUnit with JaCoCo code coverage -->
<target name="run.junit" depends="build.all"
description="--> Run JUnit and generate coverage data for all tests">
<jacoco:coverage destfile="${jacoco.exec}" >
<junit printsummary="yes" fork="yes"
forkmode="once"
haltonfailure="yes">
<formatter type="plain"/>
<batchtest fork="yes" todir="${test.output.directory}">
<fileset dir="${test.dir}">
<include name="**/Test*.java"/>
</fileset>
</batchtest>
<classpath refid="run.path.id"/>
</junit>
</jacoco:coverage>
</target>
<!-- Make JaCoCo generate a HTML based report of code coverage -->
<target name="coverage" depends="run.junit"
description="--> Generate code coverage report in the report directory">
<jacoco:report>
<executiondata>
<file file="${jacoco.exec}"/>
</executiondata>
<structure name="Coverage of SkyCave" >
<classfiles>
<fileset dir="${bin.dir}">
<!-- We do not generate coverage for the test case source
code -->
<exclude name="**/Test*"/>
</fileset>
</classfiles>
<sourcefiles encoding="UTF-8" tabwidth="2">
<fileset dir="${src.dir}"/>
</sourcefiles>
</structure>
<html destdir="${jacoco.report.dir}"/>
</jacoco:report>
<echo message="To see report, browse to index.html in ${jacoco.report.dir}."/>
</target>
<!-- JavaDoc generation -->
<target name="javadoc" depends="build.src"
description="--> Generate javadoc in folder ${javadoc.dir}">
<javadoc
source = "1.8"
packagenames=
"cloud.*"
sourcepath="${src.dir}"
destdir="${javadoc.dir}"
package="true"
doctitle="<b>Music Library Music Syncer</b>"
bottom="Aram Al-Sabti, [email protected]"
windowtitle="MLMS">
<sourcepath>
<path location="${src.dir}"/>
</sourcepath>
<classpath>
<path refid="run.path.id"/>
</classpath>
</javadoc>
<echo message="Javadoc is in folder: ${javadoc.dir}."/>
</target>
<!-- GUI application -->
<target name="gui"
depends="build.all"
description="--> * Run the MLMS application.">
<java classpathref="run.path.id"
classname="main.UI"
fork="true">
<!-- Add native libraries to path (fork MUST be "true"/"yes")
in order for System.loadLibrary(...) to work! -->
<sysproperty
key="java.library.path"
value="${java.library.path};${jmtp-natives.dir}">
</sysproperty>
</java>
</target>
</project>