1
<project name="weka" default="compile" basedir=".">
3
===========================================================================
4
Ant build file for weka. Tested with ant 1.6.5 and Junit 3.8.2. Requires
5
JavaMail and the java activation framework for mailing unit test results.
7
Type ant -projecthelp for targets and descriptions.
8
Assumes weka and tests (if unit testing) are in the same directory.
9
Build file can reside and be executed from either inside weka or the
10
directory containing weka.
13
===========================================================================
16
<!-- set global properties for this build -->
17
<property name="src" value="src/main/java"/>
18
<property name="src-test" value="src/test/java"/>
19
<property name="lib" value="lib" />
20
<property name="regression_tests_root" value="src/test/resources/wekarefs"/>
21
<property name="build" value="build"/>
22
<property name="dist" value="dist"/>
23
<property name="doc" value="doc"/>
24
<property name="reports" value="reports"/>
25
<property name="javac_max_memory" value="256m"/>
26
<property name="run_tests_fail" value="true"/>
27
<property name="headless" value="false"/>
28
<property name="macdistrib" value="osx-distrib"/>
30
<target name="init_all">
31
<!-- Create the time stamp -->
35
<!-- general classpath definition, incl. CLASSPATH env. variable,
36
// but jars in lib directory have precedence over the CLASSPATH variable -->
37
<path id="project.class.path">
38
<fileset dir="${lib}">
39
<include name="*.jar"/>
40
<include name="*.zip"/>
42
<pathelement location="${build}/classes"/>
43
<pathelement location="${build}/testcases"/>
44
<pathelement path="${java.class.path}" />
48
============================================================================
49
Compilation and documentation making stuff
50
============================================================================
53
<target name="init_compile" depends="init_all">
54
<!-- Create the build directory structure used by compile -->
55
<mkdir dir="${build}/classes"/>
58
<!-- Compile the java code from ${src}/weka into ${build}/classes -->
59
<target name="compile" depends="init_compile"
60
description="Compile weka and deposit class files in build/classes">
61
<javac srcdir="${src}"
62
fork="yes" memoryMaximumSize="${javac_max_memory}"
63
destdir="${build}/classes"
64
optimize="${optimization}"
66
deprecation="${deprecation}"
67
source="1.5" target="1.5">
69
<classpath refid="project.class.path" />
71
<copy todir="${build}/classes" >
72
<fileset dir="${src}">
73
<include name="weka/**/*.excludes"/>
74
<include name="weka/**/*.gif"/>
75
<include name="weka/**/*.png"/>
76
<include name="weka/**/*.jpeg"/>
77
<include name="weka/**/*.jpg"/>
78
<include name="weka/**/*.props"/>
79
<include name="weka/**/*.txt"/>
80
<include name="weka/**/*.xml"/>
81
<include name="weka/**/DatabaseUtils.props.*"/>
82
<include name="weka/gui/beans/README*"/>
83
<include name="**/*.cup"/>
84
<include name="**/*.flex"/>
85
<include name="**/*.jflex"/>
86
<include name="**/*.properties"/>
87
<include name="**/*.default"/>
90
<rmic base="${build}/classes"
91
classname="weka.experiment.RemoteEngine"/>
94
<!-- Make the javadocs -->
97
description="Make javadocs into ./doc">
99
<javadoc sourcepath="${src}"
101
packagenames="weka.*"
106
<!-- insert the links to our homepage and documentation.html -->
107
<replace dir="${doc}"
108
token=""help-doc.html""
109
value=""../documentation.html" target="_blank"">
110
<include name="**/*.html"/>
113
<replace dir="${doc}"
114
token="Help</B></FONT></A>&nbsp;</TD>"
115
value="Help</B></FONT></A>&nbsp;</TD> <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="http://www.cs.waikato.ac.nz/ml/weka/" target="_blank"><FONT CLASS="NavBarFont1"><B>Weka's home</B></FONT></A>&nbsp;</TD>">
116
<include name="**/*.html"/>
122
===========================================================================
124
===========================================================================
126
<!-- Junit testing initialization -->
127
<target name="init_tests" depends="init_all">
128
<available property="junit.present" classname="junit.framework.TestCase"/>
129
<!-- Create the build directory structure used by compile -->
130
<mkdir dir="${build}/testcases"/>
131
<mkdir dir="${reports}"/>
134
<!-- compile the testcases -->
135
<target name="compile_tests" depends="init_tests, compile"
136
description="Compile unit tests into build/testcases">
137
<javac srcdir="${src-test}"
138
fork="yes" memoryMaximumSize="${javac_max_memory}"
139
destdir="${build}/testcases"
140
optimize="${optimization}"
142
deprecation="${deprecation}"
143
source="1.5" target="1.5">
144
<classpath refid="project.class.path" />
146
<copy todir="${build}/testcases" >
147
<fileset dir="${src-test}">
148
<include name="**/*.arff"/>
149
<include name="**/*.cost"/>
150
<include name="**/*.xml"/>
151
<include name="**/*.matrix"/>
156
<!-- Run the test cases via junit's testrunner class.
157
This is a faster, simpler option than running the junit task -->
158
<target name="run_tests" depends="compile_tests"
159
description="Execute unit tests (fast)">
160
<java fork="yes" dir="."
161
classname="junit.textui.TestRunner"
162
taskname="junit" failonerror="${run_tests_fail}">
163
<arg value="weka.AllTests"/>
164
<classpath refid="project.class.path" />
165
<jvmarg value="-Djava.awt.headless=${headless}"/>
166
<jvmarg value="-Dweka.test.Regression.root=${regression_tests_root}"/>
170
<!-- Run the test cases and produce an html summary (in ${reports}-->
171
<target name="junit" depends="compile_tests"
172
description="Execute unit tests and produce html summary (in ./reports)">
173
<junit fork="yes" dir=".">
174
<jvmarg value="-Djava.awt.headless=${headless}"/>
175
<jvmarg value="-Dweka.test.Regression.root=${regression_tests_root}"/>
176
<formatter type="xml"/>
177
<classpath refid="project.class.path" />
178
<batchtest todir="${reports}">
179
<fileset dir="${build}/testcases">
180
<include name="**/*Test.class"/>
181
<exclude name="**/AllTests.class"/>
186
<junitreport todir="${reports}">
187
<fileset dir="${reports}">
188
<include name="TEST-*.xml"/>
190
<report format="noframes" todir="${reports}"/>
196
===========================================================================
198
===========================================================================
201
<target name = "init_dist" depends="init_all">
202
<!-- Create the distribution directory -->
203
<mkdir dir="${dist}"/>
206
<!-- Put everything in ${build}/classes into the weka.jar file -->
207
<target name="exejar" depends="compile, init_dist"
208
description="Create an executable jar file in ./dist">
209
<jar jarfile="${dist}/weka.jar"
210
basedir="${build}/classes">
212
<attribute name="Main-Class" value="weka.gui.GUIChooser"/>
217
<!-- Put all .java, and .props files into ${dist}/weka-src.jar-->
218
<target name="srcjar" depends="init_dist, init_all"
219
description="Create a jar file containing weka source in ./dist">
220
<!-- jar up the source -->
221
<jar jarfile="${dist}/weka-src.jar"
223
<include name="*.xml"/>
224
<include name="src/**/*.excludes"/>
225
<include name="src/**/*.gif"/>
226
<include name="src/**/*.java"/>
227
<include name="src/**/*.jpeg"/>
228
<include name="src/**/*.jpg"/>
229
<include name="src/**/*.props"/>
230
<include name="src/**/*.txt"/>
231
<include name="src/**/*.xml"/>
232
<include name="src/**/DatabaseUtils.props.*"/>
233
<include name="src/**/weka/gui/beans/README*"/>
234
<include name="src/**/*.cup"/>
235
<include name="src/**/*.flex"/>
236
<include name="src/**/*.jflex"/>
237
<include name="src/**/*.properties"/>
238
<include name="src/**/*.default"/>
242
<!-- make a jar file containing just the stuff needed for running a remote experiment server -->
243
<target name="remotejar" depends="compile, init_dist"
244
description="Create a jar file containing classes for remote experiments in ./dist">
245
<jar jarfile="${dist}/remoteEngine.jar"
246
basedir="${build}/classes"
247
includes="weka/experiment/*_*.class,weka/experiment/RemoteEngine*.class,weka/experiment/Compute.class,weka/experiment/Task.class,weka/experiment/TaskStatusInfo.class,weka/core/Queue*.class,weka/core/RevisionHandler.class,weka/core/Utils.class,weka/core/RevisionUtils.class"/>
248
<copy todir="${dist}" >
249
<fileset dir="${src}/weka/experiment">
250
<include name="remote.policy"/>
251
<include name="remote.policy.example"/>
254
<jar jarfile="${dist}/remoteExperimentServer.jar"
256
includes="remoteEngine.jar,remote.policy,remote.policy.example"/>
257
<delete file="${dist}/remoteEngine.jar"/>
258
<delete file="${dist}/remote.policy"/>
259
<delete file="${dist}/remote.policy.example"/>
262
<!-- Writes $release version number to weka/core/version.txt -->
263
<target name="set_version">
264
<echo message="${release}" file="${src}/weka/core/version.txt"/>
265
<echo message="${release}" file="${build}/classes/weka/core/version.txt"/>
268
<!-- Make a release -->
269
<target name="release" depends="run_tests, release_sub_tasks"
270
description="Make a release in ${release}. Run with -Drelease=<number of release (eg. 3-4-1)>.">
273
<target name="release_no_junit" depends="compile, release_sub_tasks"
274
description="Make a release in ${release} without running junit tests. Run with -Drelease=<number of release (eg. 3-4-1)>.">
277
<target name="release_sub_tasks" depends="set_version, exejar, remotejar, srcjar, docs, changelog">
278
<!-- copy the docs to dist/docs -->
280
<copy todir="weka-${release}/weka-${release}/doc" >
281
<fileset dir="${doc}"/>
283
<copy todir="weka-${release}/weka-${release}">
284
<fileset dir="${dist}"/>
286
<copy todir="weka-${release}/weka-${release}/changelogs">
287
<fileset dir="../wekadocs/changelogs"/>
289
<copy todir="weka-${release}/weka-${release}/data">
290
<fileset dir="../wekadocs/data"/>
292
<copy todir="weka-${release}/weka-${release}">
293
<fileset dir="../wekadocs">
294
<include name="*.pdf"/>
297
<copy todir="weka-${release}/weka-${release}">
298
<fileset dir="../wekadocs">
299
<include name="README*"/>
300
<include name="COPYING"/>
301
<include name="documentation.*"/>
302
<include name="weka.gif"/>
303
<include name="weka.ico"/>
306
<zip destfile="weka-${release}.zip"
307
basedir="weka-${release}"/>
310
<!-- Make a Max OSX application (NOTE: assumes that release/release_no_junit or something that calls
311
release has been run first!!!). Also requires Ant version 1.7.0 or higher -->
312
<target name="osx_application" description="Make an OS X application. Run with -Drelease=<number of release (eg. 3-4-1)>. Assumes a release target has been run first!">
313
<mkdir dir="${macdistrib}"/>
314
<mkdir dir="${macdistrib}/weka-${release}"/>
315
<copy todir="${macdistrib}/weka-${release}">
316
<fileset dir="weka-${release}/weka-${release}"/>
318
<taskdef name="jarbundler"
319
classname="net.sourceforge.jarbundler.JarBundler" />
320
<jarbundler dir="${macdistrib}"
321
name="weka-${release}"
322
mainclass="weka.gui.GUIChooser"
323
icon="${src}/weka/gui/weka_icon.icns"
329
workingdirectory="$APP_PACKAGE/Contents/Resources"
331
<javaproperty name="java.library.path" value="$APP_PACKAGE/Contents/Resources"/>
332
<jarfileset dir="weka-${release}/weka-${release}">
333
<include name="weka.jar"/>
337
<!-- Make a .dmg disk image -->
338
<exec executable="/usr/bin/hdiutil" os="Mac OS X">
339
<arg value="create"/>
340
<arg value="-srcfolder"/>
341
<arg value="${macdistrib}"/>
342
<arg value="-volname"/>
343
<arg value="weka-${release}"/>
345
<arg value="${macdistrib}/weka-${release}.dmg"/>
349
<!-- New subversion stuff -->
350
<target name="svnCheckout" description="Checkout from subversion. Run with -Dsvn_username=username -Dsvn_password=password -Dweka_branch=<branch name (e.g. trunk, branches/book2ndEd-branch)>.">
351
<property name="source-root" value="."/>
352
<property name="repository.URL" value="https://svn.scms.waikato.ac.nz/svn/weka"/>
353
<java classname="org.tmatesoft.svn.cli.SVN"
354
dir="${source-root}/" fork="true">
356
<arg value="--username"/>
357
<arg value="${svn_username}"/>
358
<arg value="--password"/>
359
<arg value="${svn_password}"/>
360
<arg value="${repository.URL}/${weka_branch}/weka"/>
362
<pathelement location="${ant.home}/lib/svnkit.jar" />
363
<pathelement location="${ant.home}/lib/svnkit-cli.jar" />
366
<java classname="org.tmatesoft.svn.cli.SVN"
367
dir="${source-root}/" fork="true">
369
<arg value="--username"/>
370
<arg value="${svn_username}"/>
371
<arg value="--password"/>
372
<arg value="${svn_password}"/>
373
<arg value="${repository.URL}/${weka_branch}/wekadocs"/>
375
<pathelement location="${ant.home}/lib/svnkit.jar" />
376
<pathelement location="${ant.home}/lib/svnkit-cli.jar" />
379
<java classname="org.tmatesoft.svn.cli.SVN"
380
dir="${source-root}/" fork="true">
382
<arg value="--username"/>
383
<arg value="${svn_username}"/>
384
<arg value="--password"/>
385
<arg value="${svn_password}"/>
386
<arg value="${repository.URL}/${weka_branch}/installer"/>
388
<pathelement location="${ant.home}/lib/svnkit.jar" />
389
<pathelement location="${ant.home}/lib/svnkit-cli.jar" />
394
<target name="changelog"
395
description="Create a changelog file for a release of Weka. Run with -Dsvn_username=username -Dsvn_password=password -Drelease=<number of release (eg. 3-4-1)>, -Ddate_range=<date range for changes (eg. {2008-07-16}:{2008-09-29})>, -Dweka_branch=<branch name (e.g. trunk, branches/book2ndEd-branch)>.">
396
<property name="repository.URL" value="https://svn.scms.waikato.ac.nz/svn/weka"/>
397
<java classname="org.tmatesoft.svn.cli.SVN" fork="true"
398
output="../wekadocs/changelogs/CHANGELOG-${release}">
400
<arg value="--username"/>
401
<arg value="${svn_username}"/>
402
<arg value="--password"/>
403
<arg value="${svn_password}"/>
405
<arg value="${date_range}"/>
407
<arg value="${repository.URL}/${weka_branch}/weka/src/main/java/weka"/>
409
<pathelement location="${ant.home}/lib/svnkit.jar" />
410
<pathelement location="${ant.home}/lib/svnkit-cli.jar" />
415
<!-- This target is used for an automated nightly/weekly build job -->
416
<target name="nightly_build"
418
description="Does a svn checkout, builds, runs unit tests, and mails the output to mail recipients (run ant with -Dsvn_username=username -Dsvn_password=password -Dweka_branch=branch -Dmail_recipients=<email,email,...> -Dmail_sender=email -Dmail_smtp_host=smtp-server)">
420
<!-- run the build process -->
421
<ant antfile="${ant.file}" target="svnCheckout" output="${reports}/nightly_build-init.txt">
422
<property name="mail_smtp_host" value="${mail_smtp_host}"/>
423
<property name="mail_sender" value="${mail_sender}"/>
424
<property name="mail_recipients" value="${mail_recipients}"/>
425
<property name="svn_username" value="${svn_username}"/>
426
<property name="svn_password" value="${svn_password}"/>
427
<property name="weka_branch" value="${weka_branch}"/>
430
<ant antfile="${ant.file}" dir="weka" target="run_tests" output="../${reports}/nightly_build-results.txt">
431
<property name="mail_smtp_host" value="${mail_smtp_host}"/>
432
<property name="mail_sender" value="${mail_sender}"/>
433
<property name="mail_recipients" value="${mail_recipients}"/>
434
<property name="run_tests_fail" value="false"/>
435
<property name="headless" value="${headless}"/>
438
<!-- mail the results -->
439
<mail messageMimeType="text/html"
440
tolist="${mail_recipients}"
441
mailhost="${mail_smtp_host}"
442
subject="nightly build results (${weka_branch}): ${TODAY}"
443
from="${mail_sender}">
444
<fileset dir="${reports}">
445
<include name="nightly_build*.*"/>
452
<target name="clean" depends="init_all"
453
description="Removes the build, dist and reports directories">
454
<!-- Delete the ${build} and ${dist} directory trees -->
455
<delete dir="${build}"/>
456
<delete dir="${dist}"/>
457
<delete dir="${reports}"/>
460
<target name="superclean" depends="clean"
461
description="Clean plus removes source trees! and doc directories">
462
<!-- WARNING, this deletes the source and doc directories -->
463
<delete dir="${src}"/>
464
<delete dir="${doc}"/>