Next Revision →BlameRevision Log

source: iobaby/build.xml

Last change on this file was 12:2e4bc322d0c4, checked in by Shawn Wilson <shawn@…>, 21 months ago

saw_020417_1 - Add 'projectKey' to web-build call.

File size: 37.3 KB
Line 
1<!--
2Copyright (C) 2016-2017 Virgo Venture, Inc.
3@%@~LICENSE~@%@
4-->
5<project name="IOVAR Baby" default="app" basedir=".">
6    <property file="etc/build.properties"/>
7    <property file="etc/app.properties"/>
8
9    <!-- project -->
10    <property name="project" value="IOVAR Baby Project"/>
11    <property name="project.name" value="iobaby"/>
12    <property name="project.copyright" value="Virgo Venture, Inc."/>
13    <property name="project.copyright.year" value="2016-2017"/>
14    <property name="project.dir" location="${basedir}"/>
15
16    <!-- application -->
17    <property name="app" value="IOVAR Baby Application"/>
18    <property name="app.name" value="iobaby"/>
19    <property name="app.dir" location="${project.dir}/WEB-INF"/>
20    <property name="app.lib.dir" location="${app.dir}/lib" />
21    <path id="app.libs">
22        <fileset dir="${app.lib.dir}" includes="*.jar"/>
23    </path>
24    <property name="app.temp.dir" location="${app.dir}/tmp"/>
25
26    <!-- Tomcat -->
27    <property name="tomcat.catalina.jar" value="/usr/share/tomcat-6/lib/catalina.jar"/>
28    <property name="tomcat.user" value="tomcat"/>
29
30    <!-- deployment -->
31    <property name="deploy" value="Deploy"/>
32    <property name="deploy.dir" location="/var/lib/tomcat-6/webapps/${app.name}"/>
33   
34    <!-- dependency jars -->
35    <property name="jars" value="Java Dependencies"/>
36    <property name="jars.dir" location="${app.lib.dir}/jars"/>
37    <property name="jars.build.dir" location="${jars.dir}/build"/>
38    <path id="jars.build">
39        <fileset dir="${jars.build.dir}" includes="*.jar"/>
40    </path>
41    <property name="jars.common.dir" location="${jars.dir}/common"/>
42    <path id="jars.common">
43        <fileset dir="${jars.common.dir}" includes="*.jar"/>
44    </path>
45    <property name="jars.code.dir" location="${jars.dir}/code"/>
46    <path id="jars.code">
47        <fileset dir="${jars.code.dir}" includes="*.jar"/>
48        <fileset dir="${jars.common.dir}" includes="*.jar"/>
49        <fileset file="${jars.servlet-api}"/>
50        <fileset file="${tomcat.catalina.jar}"/>
51    </path>
52    <property name="jars.code.tests.dir" location="${jars.code.dir}_tests"/>
53    <path id="jars.code.tests">
54        <fileset dir="${jars.code.tests.dir}" includes="*.jar"/>
55    </path>
56    <property name="jars.iovar.dir" location="${jars.dir}/iovar"/>
57    <path id="jars.iovar">
58        <fileset dir="${jars.iovar.dir}" includes="*.jar"/>
59    </path>
60    <property name="jars.run.dir" location="${jars.dir}/run"/>
61    <path id="jars.run">
62        <fileset dir="${jars.run.dir}" includes="*.jar"/>
63    </path>
64    <path id="jars.servlet-api">
65        <fileset file="${jars.servlet-api.file}"/>
66    </path>
67
68    <!-- main code -->
69    <property name="code" value="Java Code"/>
70    <property name="code.dir" location="${app.dir}/classes"/>
71    <property name="code.src.dir" location="${project.dir}/src"/>
72    <path id="code.classpath">
73        <path refid="jars.code"/>
74        <path refid="jars.common"/>
75        <path refid="jars.iovar"/>
76        <path refid="jars.run"/>
77        <path refid="jars.servlet-api"/>
78        <dirset dir="${code.dir}"/>
79    </path>
80    <path id="code.classpath.build">
81        <path refid="jars.build"/>
82        <path refid="jars.code"/>
83        <path refid="jars.common"/>
84        <path refid="jars.iovar"/>
85        <path refid="jars.servlet-api"/>
86    </path>
87    <property name="code.tests" value="${code} Unit Tests"/>
88    <property name="code.tests.name" value="tests"/>
89    <property name="code.tests.dir" location="${code.dir}_${code.tests.name}" />
90    <property name="code.tests.src.dir" location="${app.dir}/src_${code.tests.name}"/>
91    <fileset id="code.tests.src.files" dir="${code.tests.src.dir}">
92        <include name="**/Test*.java" />
93        <exclude name="**/TestUtil.java" />
94        <exclude name="**/old*/**"/>
95    </fileset>
96    <path id="code.tests.classpath">
97        <path refid="code.classpath"/>
98        <path refid="jars.code.tests"/>
99        <dirset dir="${code.tests.dir}"/>
100    </path>
101    <path id="code.tests.classpath.build">
102        <path refid="code.classpath"/>
103        <path refid="jars.code.tests"/>
104    </path>
105
106    <!-- ant tasks -->
107    <property name="tasks" value="Ant Tasks"/>
108    <property name="tasks.name" value="ant"/>
109    <property name="tasks.dir" location="${app.temp.dir}/${tasks.name}"/>
110    <property name="tasks.pkg" value="com.virgoventure.iobaby.${tasks.name}"/>
111    <property name="tasks.pkg.path" value="com/virgoventure/iobaby/${tasks.name}"/>
112    <property name="tasks.tests" value="${tasks} Unit Tests"/>
113    <property name="tasks.tests.dir" location="${code.tests.dir}/${tasks.pkg.path}"/>
114    <fileset id="tasks.tests.src.files" dir="${code.tests.src.dir}">
115        <include name="${tasks.pkg.path}/Test*.java" />
116        <exclude name="**/TestUtil.java" />
117        <exclude name="**/old*/**"/>
118    </fileset>
119    <path id="tasks.tests.classpath.build">
120        <path refid="tasks.classpath"/>
121        <path refid="jars.code.tests"/>
122    </path>
123    <path id="tasks.classpath">
124        <dirset dir="${tasks.dir}"/>
125        <path refid="tasks.classpath.build"/>
126        <dirset dir="${code.dir}"/>
127    </path>
128    <path id="tasks.classpath.build">
129        <path refid="jars.build"/>
130        <path refid="jars.code"/>
131        <fileset file="${jars.ant.file}"/>
132        <path refid="jars.servlet-api"/>
133    </path>
134    <path id="tasks.external.classpath">
135        <path refid="jars.build"/>
136        <path refid="jars.common"/>
137    </path>
138
139    <!-- build -->
140    <property name="build" value="Ant Build"/>
141    <property name="build.name" value="build"/>
142    <property name="build.dir" location="${app.dir}"/>
143    <property name="build.src.dir" location="${build.dir}/src_${build.name}" />
144    <path id="build.classpath">
145        <path refid="jars.build"/>
146        <path refid="jars.common"/>
147        <path refid="tasks.classpath"/>
148    </path>
149
150    <!-- documentation -->
151    <property name="docs" value="Documentation"/>
152    <property name="docs.name" value="docs"/>
153    <property name="docs.dir" location="${project.dir}/${docs.name}" />
154    <property name="docs.api" value="API ${docs}"/>
155    <property name="docs.api.name" value="api"/>
156    <property name="docs.api.dir" location="${docs.dir}/${docs.api.name}"/>
157
158    <!-- test suites -->
159    <property name="tests" value="Test Suite"/>
160    <property name="tests.name" value="unit_tests"/>
161    <property name="tests.dir" location="${project.dir}/${tests.name}"/>
162    <property name="tests.haltonfailure" value="no"/>
163   
164    <!-- miscellany -->
165    <property name="browser.executable" value="chrome"/>
166    <propertyset id="proxy.properties">
167        <propertyref prefix="java.net.useSystemProxies"/>
168        <propertyref prefix="http."/>
169        <propertyref prefix="https."/>
170        <propertyref prefix="ftp."/>
171        <propertyref prefix="socksProxy"/>
172    </propertyset>
173
174    <!-- normalize some common descriptive text -->
175    <!-- (unfortunately properties cannot be used in the target descriptions themselves) -->
176    <property name="descr.init" value="Prepare"/>
177    <property name="descr.clean" value="Clean up"/>
178    <property name="descr.install" value="Install"/>
179    <property name="descr.deploy" value="Deploy"/>
180
181    <!-- iovar -->
182    <property name="iovar.tasks.pkg" value="win.iovar.${tasks.name}"/>
183
184
185
186
187    <!-- ======================================================= -->
188    <!-- Ant Task Definitions (3rd party / custom)               -->
189    <!-- ======================================================= -->
190   
191    <!-- loads the ant-contrib tasks... needed for 'foreach' -->
192    <target name="ant.task.contrib" depends="tasks.init, code.init">
193        <taskdef resource="net/sf/antcontrib/antlib.xml" classpathref="tasks.classpath"/>
194    </target>
195 
196    <target name="ant.task.WebBuilder" depends="tasks.init, code.init">
197        <taskdef name="web-build" classname="${iovar.tasks.pkg}.WebBuilder" classpathref="tasks.classpath"/>
198    </target>
199
200
201
202
203
204    <!-- ======================================================= -->
205    <!-- PROJECT                                                 -->
206    <!-- ======================================================= -->
207
208    <target name="project.init">
209        <echo>${descr.init} ${project}</echo>
210        <tstamp/>
211        <available file="etc/build.properties" property="project.installed"/>
212        <antcall target="project.install.fail"/>
213    </target>
214    <target name="project.install.fail" unless="project.installed">
215        <echo message="Project not yet installed!"/>
216        <fail message="You need to set up etc/build.properties with a basic configuration first (try the project.install task)."/>
217    </target>
218    <target name="project.clean" depends="tests.clean, app.clean"
219        description="Clean up entire project" >
220        <echo>${descr.clean} ${project}</echo>
221
222        <delete file="${app.lib.dir}/${project.name}.jar" verbose="true"/>
223        <delete file="${app.dir}/${project.name}.war" verbose="true"/>
224    </target>
225
226    <target name="project.install" description="Set up a working project configuration">
227        <echo>${descr.install} ${project}</echo>
228
229        <filterset id="project.install.filters">
230            <filter token="PROJECT" value="${project}"/>
231            <filter token="PROJECT_NAME" value="${project.name}"/>
232        </filterset>
233
234        <!-- this might seem overcomplicated, but this is required to -->
235        <!-- copy sample.build.properties -> build.properties -->
236        <!-- ONLY IF build.properties DOES NOT EXIST -->
237        <copy todir="etc" verbose="true">
238            <fileset dir="etc" includes="sample.build.properties">
239                <present present="srconly" targetdir=".">
240                    <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
241                </present>
242            </fileset>
243            <filterset refid="project.install.filters"/>
244            <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
245        </copy>
246        <property file="etc/build.properties"/>
247       
248        <!-- recursively copy & map sample.* files to * -->
249        <!-- only if (not sample.*.zip) and (* doesn't exist) -->
250        <copy todir="${project.dir}" preservelastmodified="true" verbose="true">
251            <fileset 
252                dir="${project.dir}"
253                includes="**/sample.*"
254                excludes="**/sample.*.zip, etc/sample.app.properties,
255                          WEB-INF/**">
256
257                <present present="srconly" targetdir="${project.dir}">
258                    <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
259                </present>
260            </fileset>
261            <filterset refid="project.install.filters"/>
262            <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
263        </copy>
264
265        <!-- because project.update requires ant-contrib and it may not have been downloaded
266             yet, we first try to get it now (however, the user could already have it their classpath) -->
267        <loadfile property="ant.contrib.url" srcFile="${jars.build.dir}/ant-contrib.url"/>
268        <get dest="${jars.build.dir}" src="${ant.contrib.url}" skipexisting="true"/>
269
270        <antcall target="project.update"/>
271
272        <echo>Project Installed</echo>
273        <echo>Edit etc/build.properties as necessary and then run 'app.install' to set up a working application</echo>
274    </target>
275    <target name="project.install.clean" depends="project.clean, app.install.clean"
276        description="Clean up project build and installation">
277        <echo>${descr.clean} ${project} ${descr.install}</echo>
278
279        <input addproperty="project.install.clean.configs" validargs="y,n">
280            Delete your local configuration files? These are not tracked!
281        </input>
282        <condition property="do.project.install.clean.configs">
283            <equals arg1="${project.install.clean.configs}" arg2="y"/>
284        </condition>
285        <antcall target="project.install.clean.configs"/>
286    </target>
287    <target name="project.install.clean.configs" if="do.project.install.clean.configs">
288        <!--
289        <delete dir="${project.dir}/etc" verbose="true">
290            <fileset
291                dir="${project.dir}/etc"
292                includes="sample.*"
293                excludes="sample.*.zip"/>
294            <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
295        </delete>
296        -->
297        <delete file="${project.dir}/etc/build.properties" verbose="true"/>
298    </target>
299
300    <target name="project.update" description="Download updated or missing project jars" depends="ant.task.contrib">
301        <echo>Downloading any missing/update project JAR files</echo>
302        <foreach target="project.update.build" param="project.update.file">
303            <fileset dir="${jars.build.dir}" includes="*.url"/>
304        </foreach>
305        <foreach target="project.update.code" param="project.update.file">
306            <fileset dir="${jars.code.dir}" includes="*.url"/>
307        </foreach>
308        <foreach target="project.update.common" param="project.update.file">
309            <fileset dir="${jars.common.dir}" includes="*.url"/>
310        </foreach>
311        <foreach target="project.update.iovar" param="project.update.file">
312            <fileset dir="${jars.iovar.dir}" includes="*.url"/>
313        </foreach>
314        <foreach target="project.update.run" param="project.update.file">
315            <fileset dir="${jars.run.dir}" includes="*.url"/>
316        </foreach>
317    </target>
318    <target name="project.update.build">
319        <loadfile property="project.update.url" srcFile="${project.update.file}"/>
320        <get dest="${jars.build.dir}" src="${project.update.url}" verbose="on" usetimestamp="true"/>
321    </target>
322    <target name="project.update.code">
323        <loadfile property="project.update.url" srcFile="${project.update.file}"/>
324        <get dest="${jars.code.dir}" src="${project.update.url}" verbose="on" usetimestamp="true"/>
325    </target>
326    <target name="project.update.common">
327        <loadfile property="project.update.url" srcFile="${project.update.file}"/>
328        <get dest="${jars.common.dir}" src="${project.update.url}" verbose="on" usetimestamp="true"/>
329    </target>
330    <target name="project.update.iovar">
331        <loadfile property="project.update.url" srcFile="${project.update.file}"/>
332        <get dest="${jars.iovar.dir}" src="${project.update.url}" verbose="on" usetimestamp="true"/>
333    </target>
334    <target name="project.update.run">
335        <loadfile property="project.update.url" srcFile="${project.update.file}"/>
336        <get dest="${jars.run.dir}" src="${project.update.url}" verbose="on" usetimestamp="true"/>
337    </target>
338
339    <target name="project" depends="project.init, project.jars, tests" description="Build entire project">
340        <echo>${project}</echo>
341
342        <war destfile="${app.dir}/${project.name}.war" webxml="${app.dir}/web.xml">
343            <lib dir="${app.lib.dir}">
344                <include name="*.jar"/>
345            </lib>
346            <classes dir="${code.dir}">
347                <include name="**/*.class"/>
348            </classes>
349            <fileset dir="${project.dir}" followsymlinks="false">
350                <exclude name="WEB-INF/**"/>
351            </fileset>
352        </war>
353    </target>
354    <target name="project.production" depends="project.init, app.production, tests" description="Build entire project (for production)">
355        <echo>${project}</echo>
356    </target>
357
358    <target name="project.jars" depends="tasks.jar, app.jars" description="Build all project jars for distribution">
359        <echo>${project}</echo>
360    </target>
361    <target name="project.jars.production" depends="tasks.jar, app.jars.production" description="Build production project jars for distribution">
362        <echo>${project}</echo>
363    </target>
364
365
366
367    <!-- ======================================================= -->
368    <!-- APPLICATION                                             -->
369    <!-- ======================================================= -->
370
371    <target name="app.init" depends="project.init, app.install.check, app.install.fail">
372        <echo>${descr.init} ${app}</echo>
373    </target>
374    <target name="app.clean" depends="code.clean"
375            description="Clean up application">
376        <echo>${descr.clean} ${app}</echo>
377        <delete quiet="true">
378            <fileset
379                dir="${app.lib.dir}"
380                includes="*.jar"
381                />
382        </delete>
383        <!--
384        <delete dir="${app.lib.tests.dir}" quiet="true"/>
385        -->
386        <delete dir="${code.dir}" quiet="true"/>
387        <delete dir="${app.temp.dir}" quiet="true" />
388        <delete file="${app.dir}/web.xml"/>
389    </target>
390
391    <target name="app.install.check">
392        <available file="etc/app.properties" property="app.installed"/>
393    </target>
394    <target name="app.install.fail" unless="app.installed">
395        <echo message="Application not yet installed!"/>
396        <fail message="You need to set up etc/app.properties with a basic configuration first (try the app.install task)"/>
397    </target>
398    <target name="app.install" depends="project.init"
399        description="Set default application configuration">
400        <echo>${descr.install} ${app}</echo>
401
402        <input addproperty="app.install.ant.jar">
403            Full path to your Ant JAR (ant.jar)
404        </input>
405        <available file="${app.install.ant.jar}" property="app.install.ant.jar.found"/>
406        <antcall target="app.install.ant.jar.notfound"/>
407
408        <!-- FIXME: double-check JSR (servlet spec version) requirement -->
409        <input addproperty="app.install.servlet-api.jar">
410            Full path to your container's JSR-053 Java Servlet 2.3 -compliant implementation JAR (servlet-api.jar)
411        </input>
412        <available file="${app.install.servlet-api.jar}" property="app.install.servlet-api.jar.found"/>
413        <antcall target="app.install.servlet-api.jar.notfound"/>
414
415        <!-- this might seem overcomplicated, but this is required to -->
416        <!-- copy sample.app.properties -> app.properties -->
417        <!-- ONLY IF app.properties DOES NOT EXIST -->
418        <copy todir="etc" verbose="true">
419            <fileset dir="etc" includes="sample.app.properties">
420                <present present="srconly" targetdir=".">
421                    <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
422                </present>
423            </fileset>
424            <!--filterchain refid="app.install.filters"/-->
425            <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
426        </copy>
427        <property file="etc/app.properties"/>
428
429        <copy todir="${app.dir}" preservelastmodified="true" verbose="true">
430            <fileset 
431                dir="${app.dir}"
432                includes="**/sample.*"
433                excludes="etc/sample.build.properties,
434                          etc/sample.app.properties,
435                          **/sample.*.zip">
436
437                <present present="srconly" targetdir="${app.dir}">
438                    <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
439                </present>
440            </fileset>
441            <!--filterchain refid="app.install.filters"/-->
442            <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
443        </copy>
444
445        <!-- extract sample.*.zip files in WEB-INF -->
446        <!-- unfortunately, this cannot be made to work recursively -->
447        <unzip dest="${app.dir}">
448            <fileset dir="${app.dir}" includes="sample.*.zip"/>
449        </unzip>
450
451        <echo>${app} Installed</echo>
452        <echo>Edit etc/app.properties as necessary before running</echo>
453    </target>
454    <target name="app.install.ant.jar.notfound" unless="app.install.ant.jar.found">
455        <fail message="File not found: ${app.install.ant.jar}"/>
456    </target>
457    <target name="app.install.servlet-api.jar.notfound" unless="app.install.servlet-api.jar.found">
458        <fail message="File not found: ${app.install.servlet-api.jar}"/>
459    </target>
460    <target name="app.install.clean" depends="app.clean" description="Clean up application build and installation">
461        <echo>${descr.clean} ${app} ${descr.install}</echo>
462
463        <input addproperty="app.install.clean.configs" validargs="y,n">
464            Delete your local configuration files? These are not tracked!
465        </input>
466        <condition property="app.install.clean.configs.confirmed">
467            <equals arg1="${app.install.clean.configs}" arg2="y"/>
468        </condition>
469        <antcall target="app.install.clean.configs"/>
470    </target>
471    <target name="app.install.clean.configs" if="app.install.clean.configs.confirmed">
472        <!--
473        <delete dir="${app.dir}" verbose="true">
474            <fileset
475                dir="${app.dir}"
476                includes="**/sample.*"
477                excludes="sample.build.properties,
478                          **/sample.*.zip"/>
479            <mapper type="regexp" from="^(.*)sample\.(.+)$" to="\1\2"/>
480        </delete>
481        -->
482        <delete file="${project.dir}/etc/app.properties" verbose="true"/>
483    </target>
484
485    <target name="app" depends="tasks, code, app.libs, app.webxml" description="Build the application">
486        <echo>${app}</echo>
487    </target>
488    <target name="app.production" depends="code.production, app.libs" description="Build the application (for production)">
489        <echo>${app}</echo>
490    </target>
491    <target name="app.libs" description="Install application libraries">
492        <mkdir dir="${app.lib.dir}"/>
493        <copy todir="${app.lib.dir}">
494            <fileset dir="${jars.code.dir}" includes="*.jar"/>
495            <fileset dir="${jars.common.dir}" includes="*.jar"/>
496            <fileset dir="${jars.iovar.dir}" includes="*.jar"/>
497            <fileset dir="${jars.run.dir}" includes="*.jar"/>
498            <regexpmapper from="^(.+)(-[0-9].*)\.jar$$" to="\1.jar" handledirsep="true"/>
499        </copy>
500
501        <!--
502        <mkdir dir="${app.lib.tests.dir}"/>
503        <copy todir="${app.lib.tests.dir}">
504            <fileset dir="${jars.code.tests.dir}" includes="*.jar"/>
505            <regexpmapper from="^(.+)(-[0-9].*)\.jar$$" to="\1.jar" handledirsep="true"/>
506        </copy>
507        -->
508    </target>
509
510    <target name="app.jars" depends="app, app.jars.nodeps" description="Build application jars for distribution">
511        <echo>${app}</echo>
512    </target>
513    <target name="app.jars.production" depends="app.production, app.jars.nodeps" description="Build production application jars for distribution">
514        <echo>${app}</echo>
515    </target>
516    <target name="app.jars.nodeps">
517        <jar destfile="${app.lib.dir}/${project.name}.jar">
518            <fileset dir="${project.dir}" followsymlinks="false">
519                <exclude name="WEB-INF/**"/>
520                <exclude name="pub/**"/>
521                <exclude name="tmp/**"/>
522                <exclude name="var/cache/**"/>
523                <exclude name="var/log/**"/>
524                <exclude name="var/tmp/**"/>
525
526                <exclude name="**/sample.*"/>
527                <exclude name="**/.DS_Store"/>
528                <exclude name="**/.keep"/>
529                <exclude name="**/*.bak"/>
530                <exclude name="**/*.orig"/>
531                <exclude name="**/*.swp"/>
532            </fileset>
533            <fileset dir="${code.dir}" followsymlinks="false">
534                <include name="**/*.class"/>
535            </fileset>
536            <!-- we include the jars/**.url files so other scripts can figure out dependencies from the jar
537                 (mapped to /sys/jars/*) -->
538            <mappedresources>
539                <fileset dir="${jars.dir}" followsymlinks="false">
540                    <include name="**/*.url"/>
541                </fileset>
542                <globmapper from="*" to="sys/jars/*"/>
543            </mappedresources>
544            <mappedresources>
545                <fileset dir="${app.dir}" followsymlinks="false">
546                    <include name="${project.name}.web.xml"/>
547                </fileset>
548                <globmapper from="*" to="sys/servlets/*"/>
549            </mappedresources>
550        </jar>
551    </target>
552
553   
554    <target name="app.webxml" depends="ant.task.WebBuilder">
555        <!-- extract web.xml snippets from any iovar jar dependencies -->
556        <unzip dest="${tasks.dir}">
557            <fileset dir="${jars.iovar.dir}">
558                <include name="**/*.jar"/>
559            </fileset>
560            <patternset>
561                <include name="sys/servlets/**"/>
562            </patternset>
563        </unzip>
564
565        <web-build
566            dir="${project.dir}"
567            src="${project.dir}/etc/web.xml"
568            include="${tasks.dir}/sys/servlets"
569            dst="${app.dir}/web.xml"
570            links="${app.dir}/${project.name}.web.xml"
571            sqlStart="50"
572            excludeDirs="home:pub:tmp:var/cache:var/tmp"
573            projectKey="${project.name}"
574            />
575    </target>
576
577
578
579    <!-- ======================================================= -->
580    <!-- TASKS - Local Ant Tasks                                 -->
581    <!-- ======================================================= -->
582
583    <target name="tasks.init" depends="project.init, app.install.check, app.install.fail">
584        <echo>${descr.init} ${tasks}</echo>
585        <mkdir dir="${tasks.dir}"/>
586    </target>
587    <target name="tasks.tests.init" depends="project.init">
588        <echo>${descr.init} ${tasks.tests}</echo>
589        <mkdir dir="${tasks.tests.dir}"/>
590    </target>
591
592    <target name="tasks.clean" description="Clean up tasks">
593        <echo>${descr.clean} ${tasks}</echo>
594        <delete dir="${tasks.dir}"/>
595    </target>
596    <target name="tasks.tests.clean" description="Clean up tasks tests">
597        <echo>${descr.clean} ${tasks.tests}</echo>
598        <delete dir="${tasks.tests.dir}" quiet="true" />
599    </target>
600
601    <target name="tasks" depends="tasks.init" description="Build custom Ant tasks">
602        <echo>${tasks}</echo>
603        <!--
604        <javac
605            srcdir="${code.src.dir}"
606            destdir="${tasks.dir}"
607            includes="${tasks.pkg.path}/*.java"
608            excludes="**/old*/**"
609            classpathref="tasks.classpath.build"
610            includeJavaRuntime="no"
611            compiler="${javac.compiler}"
612            debug="${javac.debug}"
613            optimize="${javac.optimize}"
614            deprecation="${javac.deprecation}"
615            verbose="${javac.verbose}"
616            nowarn="${javac.nowarn}"
617            target="${build.target.vm.version}"
618        >
619            <compilerarg value="-Xlint:deprecation"/>
620            <compilerarg value="-Xlint:unchecked"/>
621        </javac>
622        -->
623    </target>
624    <target name="tasks.tests" depends="tasks, tasks.tests.init" description="Build taskdef unit tests" >
625        <javac
626            srcdir="${code.tests.src.dir}"
627            destdir="${code.tests.dir}"
628            includes="${tasks.pkg.path}/*.java"
629            excludes="**/old*/**"
630            classpathref="tasks.tests.classpath.build"
631            target="${build.target.vm.version}"
632        >
633            <compilerarg value="-Xlint:deprecation"/>
634            <compilerarg value="-Xlint:unchecked"/>
635        </javac>
636    </target>
637
638    <target name="tasks.jar" depends="tasks" description="Create custom taskdef jar file" >
639        <jar destfile="${app.lib.dir}/${project.name}-ant.jar">
640            <fileset dir="${tasks.dir}" followsymlinks="false">
641                <include name="${tasks.pkg.path}/**/*.class"/>
642            </fileset>
643        </jar>
644    </target>
645
646    <!-- verify the custom taskdef is actually available -->
647    <target name="tasks.verify" depends="tasks" description="Verify the custom taskdef works" >
648        <taskdef name="echo2" classname="${tasks.pkg}.SampleTaskdef" classpathref="tasks.classpath"/>
649        <echo2 message="Verified SampleTaskdef works!"/>
650    </target>
651
652
653
654    <!-- ======================================================= -->
655    <!-- CODE - Main Java Code                                   -->
656    <!-- ======================================================= -->
657
658    <target name="code.init" depends="project.init, app.install.check, app.install.fail">
659        <echo>${descr.init} ${code}</echo>
660        <mkdir dir="${code.dir}" />
661
662        <!-- dummy references so we can have valid symlinks -->
663        <!--
664        <touch file="${code.dir}/win.iovar.web.dev.MySql"/>
665        -->
666
667        <!-- copy assorted resources to the classes directory -->
668        <!--
669        <copy todir="${code.dir}" preservelastmodified="true">
670            <fileset dir="${code.src.dir}">
671                <include name="**/*.properties"/>
672                <include name="**/*.directives"/>
673                <include name="**/*.sql"/>
674                <include name="**/*.key" />
675                <include name="**/*.xml" />
676                                <include name="**/*.csv" />
677                <include name="**/character-sets*"/>
678            </fileset>
679        </copy>
680        -->
681    </target>
682    <target name="code.tests.init" depends="project.init, app.install.check, app.install.fail">
683        <echo>${descr.init} ${code.tests}</echo>
684        <mkdir dir="${code.tests.dir}" />
685
686        <!-- copy assorted resources to the classes_tests directory -->
687        <!--
688        <copy todir="${code.tests.dir}" preservelastmodified="true">
689            <fileset dir="${code.tests.src.dir}">
690                <include name="**/*.properties"/>
691                <include name="**/*.directives"/>
692                <include name="**/*.sql"/>
693                <include name="**/*.key" />
694                <include name="**/*.xml" />
695              <include name="**/character-sets*"/>
696            </fileset>
697        </copy>
698        -->
699    </target>
700
701    <target name="code.clean" description="Clean up code" >
702        <echo>${descr.clean} ${code}</echo>
703        <delete dir="${code.dir}" quiet="true" />
704    </target>
705    <target name="code.tests.clean" description="Clean up code unit tests" >
706        <echo>${descr.clean} ${code.tests}</echo>
707        <delete dir="${code.tests.dir}" quiet="true" />
708    </target>
709
710    <target name="code" depends="code.init" description="Build code">
711        <echo>${code}</echo>
712        <javac
713            srcdir="${code.src.dir}"
714            destdir="${code.dir}"
715            includes="**/*.java"
716            excludes="**/old*/**, ${tasks.pkg.path}/**"
717            classpathref="code.classpath.build"
718            compiler="${javac.compiler}"
719            debug="${javac.debug}"
720            optimize="${javac.optimize}"
721            deprecation="${javac.deprecation}"
722            verbose="${javac.verbose}"
723            nowarn="${javac.nowarn}"
724            target="${build.target.vm.version}"
725        >
726            <compilerarg value="-Xlint:deprecation"/>
727            <compilerarg value="-Xlint:unchecked"/>
728        </javac>
729    </target>
730    <target name="code.production" depends="code.init" description="Build code (for production)">
731        <echo>${code}</echo>
732        <javac
733            srcdir="${code.src.dir}"
734            destdir="${code.dir}"
735            includes="**/*.java"
736            excludes="**/old*/**, ${tasks.pkg.path}/**"
737            classpathref="code.classpath.build"
738            compiler="${javac.compiler.production}"
739            debug="${javac.debug.production}"
740            optimize="${javac.optimize.production}"
741            deprecation="${javac.deprecation.production}"
742            verbose="${javac.verbose.production}"
743            nowarn="${javac.nowarn.production}"
744            target="${build.target.vm.version}"
745        />
746    </target>
747    <target name="code.tests" depends="code, code.tests.init" description="Build code unit tests" >
748        <echo>${code.tests}</echo>
749        <javac
750            srcdir="${code.tests.src.dir}"
751            destdir="${code.tests.dir}"
752            includes="**/*.java"
753            excludes="**/old*/**"
754            classpathref="code.tests.classpath.build"
755            compiler="${javac.compiler}"
756            debug="${javac.debug}"
757            optimize="${javac.optimize}"
758            deprecation="${javac.deprecation}"
759            verbose="${javac.verbose}"
760            nowarn="${javac.nowarn}"
761            target="${build.target.vm.version}"
762        >
763            <compilerarg value="-Xlint:deprecation"/>
764            <compilerarg value="-Xlint:unchecked"/>
765        </javac>
766    </target>
767
768    <target name="code.files" if="code.files" description="Compile a defined set of files">
769        <echo>${code}</echo>
770        <javac srcdir="${code.src.dir}"
771            destdir="${code.dir}"
772            includes="${code.files}"
773            classpathref="code.classpath.build"
774            debug="${javac.debug}"
775            optimize="${javac.optimize}"
776            deprecation="${javac.deprecation}"
777            verbose="${javac.verbose}"
778            nowarn="false"
779            target="${build.target.vm.version}"
780        >
781            <compilerarg value="-Xlint:deprecation"/>
782            <compilerarg value="-Xlint:unchecked"/>
783        </javac>
784    </target>
785    <target name="code.tests.files" if="code.tests.files" description="Compile a defined set of test files">
786        <javac srcdir="${code.tests.src.dir}"
787            destdir="${code.tests.dir}"
788            includes="${code.tests.files}"
789            classpathref="code.tests.classpath.build"
790            debug="${javac.debug}"
791            optimize="${javac.optimize}"
792            deprecation="${javac.deprecation}"
793            verbose="${javac.verbose}"
794            nowarn="${javac.nowarn}"
795            target="${build.target.vm.version}"
796        >
797            <compilerarg value="-Xlint:deprecation"/>
798            <compilerarg value="-Xlint:unchecked"/>
799        </javac>
800    </target>
801
802    <target name="code.debug" description="Debug a class file">
803        <nbjpdastart addressproperty="jpda.address" name="${app.name}" transport="dt_socket">
804            <classpath refid="code.classpath"/>
805        </nbjpdastart>
806        <input addproperty="code.debug.args">Enter arguments:</input>
807        <java classname="${code.debug.class}" 
808              fork="true">
809            <classpath refid="code.classpath"/>
810            <jvmarg value="-Xdebug"/>
811            <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
812            <assertions refid="code.debug.assertions"/>
813            <arg line="${code.debug.args}"/>
814        </java>
815    </target>
816    <target name="code.tests.debug" description="Debug a test class file">
817        <nbjpdastart addressproperty="jpda.address" name="${app.name}" transport="dt_socket">
818            <classpath refid="code.tests.classpath"/>
819        </nbjpdastart>
820        <input addproperty="code.tests.debug.args">Enter arguments:</input>
821        <java classname="${code.tests.debug.class}" 
822              fork="true">
823            <classpath refid="code.tests.classpath"/>
824            <jvmarg value="-Xdebug"/>
825            <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
826            <assertions refid="code.tests.debug.assertions"/>
827            <arg line="${code.tests.debug.args}"/>
828        </java>
829    </target>
830
831
832
833
834
835    <!-- ======================================================= -->
836    <!-- TESTS - Test Suites                                     -->
837    <!-- ======================================================= -->
838
839    <target name="tests.clean" depends="code.tests.clean" description="Clean up all tests">
840        <echo>${descr.clean} ${tests}</echo>
841        <delete quiet="true" includeEmptyDirs="true">
842            <fileset dir="${tests.dir}" excludes="**/sample.*" />
843        </delete>
844        <delete dir="${code.tests.dir}" quiet="true"/>
845    </target>
846    <target name="tests.init" depends="project.init">
847        <echo>${descr.init} ${tests}</echo>
848    </target>
849    <target name="tests" depends="code.tests, tests.init" description="Build all tests">
850        <echo>${tests}</echo>
851    </target>
852
853    <target name="tests.run" depends="tests" description="Run all tests as a batch">
854        <echo>${tests}</echo>
855        <!-- FIXME
856        <antcall target="tests.junit.batch">
857            <param name="tests.junit.batch" value="code.tests.src.files"/>
858        </antcall>
859        <antcall target="tests.open"/>
860        -->
861    </target>
862
863    <target name="tests.open" description="Open browser pointed to test results">
864        <exec executable="${browser.executable}">
865            <arg file="${tests.dir}/index.html"/>
866        </exec>
867    </target>
868
869
870
871
872    <!-- ======================================================= -->
873    <!-- DEPLOY - Copy to Tomcat webapps directory               -->
874    <!-- ======================================================= -->
875
876    <target name="deploy.clean" description="Clean up deployment">
877        <echo>${descr.clean} ${deploy}</echo>
878
879        <exec executable="rm">
880            <arg value="-v"/>
881            <arg value="-r"/>
882            <arg value="${deploy.dir}"/>
883        </exec>
884    </target>
885    <target name="deploy.init">
886        <echo>${descr.init} ${deploy}</echo>
887        <mkdir dir="${deploy.dir}"/>
888        <mkdir dir="${deploy.dir}/WEB-INF/classes"/>
889    </target>
890    <target name="deploy" depends="deploy.init, app" description="Copy to webapps directory">
891        <echo>${deploy} ${app}</echo>
892
893        <unjar dest="${deploy.dir}" overwrite="true">
894            <fileset file="${jars.dir}/iovar-*.jar"/>
895            <patternset>
896                <exclude name="com/**"/>
897            </patternset>
898        </unjar>
899        <unjar dest="${deploy.dir}/WEB-INF/classes" overwrite="true">
900            <fileset file="${jars.dir}/iovar-*.jar"/>
901            <patternset>
902                <include name="com/**"/>
903            </patternset>
904        </unjar>
905
906        <delete dir="${deploy.dir}/var/log"/>
907
908        <exec executable="rsync">
909            <arg value="-av"/>
910            <arg value="--exclude=/WEB-INF/lib/jars/"/>
911            <arg value="${project.dir}/"/>
912            <arg value="${deploy.dir}"/>
913        </exec>
914
915        <!--copy todir="${deploy.dir}" verbose="true" file="${project.dir}/../CHANGELOG"/-->
916
917        <chown owner="${tomcat.user}" type="both" verbose="true">
918            <fileset dir="${deploy.dir}"/>
919        </chown>
920    </target>
921
922</project>
923
Note: See TracBrowser for help on using the repository browser.