source: iovar/build.xml @ 80:6237c4f6ba6c

Last change on this file since 80:6237c4f6ba6c was 80:6237c4f6ba6c, checked in by Shawn Wilson <shawn@…>, 21 months ago

saw_013017_4 - Updated build process for tracking dependent webapp servlet mappings.

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