Next Revision →BlameRevision Log

source: iovar/build.xml

Last change on this file was 84:618c4bef3114, checked in by Shawn Wilson <shawn@…>, 15 months ago

saw_020317_3 - Add 'projectKey' attribute to web-build task for isolating mysql config files of the

same name in inherited IOVAR webapps.

File size: 37.4 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.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="**/sample.*"/>
521                <exclude name="**/.DS_Store"/>
522                <exclude name="**/.keep"/>
523                <exclude name="**/*.bak"/>
524                <exclude name="**/*.orig"/>
525                <exclude name="**/*.swp"/>
526
527                <!-- also exclude these unless and until they have something useful to distribute -->
528                <exclude name="dev/**"/>
529                <exclude name="etc/app.properties"/>
530                <exclude name="etc/build.properties"/>
531                <exclude name="etc/rc.local"/>
532                <exclude name="etc/web.xml"/>
533                <exclude name="nbproject/**"/>
534                <exclude name="proc/**"/>
535                <exclude name="test/**"/>
536                <exclude name="var/**"/>
537                <exclude name="build.xml"/>
538                <exclude name="INSTALL"/>
539            </fileset>
540            <fileset dir="${code.dir}" followsymlinks="false">
541                <include name="**/*.class"/>
542            </fileset>
543            <!-- we include the jars/**.url files so other scripts can figure out dependencies from the jar
544                 (mapped to /sys/jars/*) -->
545            <mappedresources>
546                <fileset dir="${jars.dir}" followsymlinks="false">
547                    <include name="**/*.url"/>
548                </fileset>
549                <globmapper from="*" to="sys/jars/*"/>
550            </mappedresources>
551            <mappedresources>
552                <fileset dir="${app.dir}" followsymlinks="false">
553                    <include name="${project.name}.web.xml"/>
554                </fileset>
555                <globmapper from="*" to="sys/servlets/*"/>
556            </mappedresources>
557        </jar>
558    </target>
559
560   
561    <target name="app.webxml" depends="ant.task.WebBuilder">
562        <!-- extract web.xml snippets from any iovar jar dependencies -->
563        <unzip dest="${tasks.dir}">
564            <fileset dir="${jars.iovar.dir}">
565                <include name="**/*.jar"/>
566            </fileset>
567            <patternset>
568                <include name="sys/servlets/**"/>
569            </patternset>
570        </unzip>
571
572        <web-build
573            dir="${project.dir}"
574            src="${project.dir}/etc/web.xml"
575            include="${tasks.dir}/sys/servlets"
576            dst="${app.dir}/web.xml"
577            links="${app.dir}/${project.name}.web.xml"
578            excludeDirs="home:pub:tmp:var/cache:var/tmp"
579            projectKey="${project.name}"
580            />
581            <!-- startupBegin="100" -->
582            <!-- sqlStart="50" -->
583    </target>
584
585
586
587    <!-- ======================================================= -->
588    <!-- TASKS - Local Ant Tasks                                 -->
589    <!-- ======================================================= -->
590
591    <target name="tasks.init" depends="project.init, app.install.check, app.install.fail">
592        <echo>${descr.init} ${tasks}</echo>
593        <mkdir dir="${tasks.dir}"/>
594    </target>
595    <target name="tasks.tests.init" depends="project.init">
596        <echo>${descr.init} ${tasks.tests}</echo>
597        <mkdir dir="${tasks.tests.dir}"/>
598    </target>
599
600    <target name="tasks.clean" description="Clean up tasks">
601        <echo>${descr.clean} ${tasks}</echo>
602        <delete dir="${tasks.dir}"/>
603    </target>
604    <target name="tasks.tests.clean" description="Clean up tasks tests">
605        <echo>${descr.clean} ${tasks.tests}</echo>
606        <delete dir="${tasks.tests.dir}" quiet="true" />
607    </target>
608
609    <target name="tasks" depends="tasks.init" description="Build custom Ant tasks">
610        <echo>${tasks}</echo>
611        <javac
612            srcdir="${code.src.dir}"
613            destdir="${tasks.dir}"
614            includes="${tasks.pkg.path}/*.java"
615            excludes="**/old*/**"
616            classpathref="tasks.classpath.build"
617            includeJavaRuntime="no"
618            compiler="${javac.compiler}"
619            debug="${javac.debug}"
620            optimize="${javac.optimize}"
621            deprecation="${javac.deprecation}"
622            verbose="${javac.verbose}"
623            nowarn="${javac.nowarn}"
624            target="${build.target.vm.version}"
625        >
626            <compilerarg value="-Xlint:deprecation"/>
627            <compilerarg value="-Xlint:unchecked"/>
628        </javac>
629    </target>
630    <target name="tasks.tests" depends="tasks, tasks.tests.init" description="Build taskdef unit tests" >
631        <javac
632            srcdir="${code.tests.src.dir}"
633            destdir="${code.tests.dir}"
634            includes="${tasks.pkg.path}/*.java"
635            excludes="**/old*/**"
636            classpathref="tasks.tests.classpath.build"
637            target="${build.target.vm.version}"
638        >
639            <compilerarg value="-Xlint:deprecation"/>
640            <compilerarg value="-Xlint:unchecked"/>
641        </javac>
642    </target>
643
644    <target name="tasks.jar" depends="tasks" description="Create custom taskdef jar file" >
645        <jar destfile="${app.lib.dir}/${project.name}-ant.jar">
646            <fileset dir="${tasks.dir}" followsymlinks="false">
647                <include name="${tasks.pkg.path}/**/*.class"/>
648            </fileset>
649        </jar>
650    </target>
651
652    <!-- verify the custom taskdef is actually available -->
653    <target name="tasks.verify" depends="tasks" description="Verify the custom taskdef works" >
654        <taskdef name="echo2" classname="${tasks.pkg}.SampleTaskdef" classpathref="tasks.classpath"/>
655        <echo2 message="Verified SampleTaskdef works!"/>
656    </target>
657
658
659
660    <!-- ======================================================= -->
661    <!-- CODE - Main Java Code                                   -->
662    <!-- ======================================================= -->
663
664    <target name="code.init" depends="project.init, app.install.check, app.install.fail">
665        <echo>${descr.init} ${code}</echo>
666        <mkdir dir="${code.dir}" />
667
668        <!-- copy assorted resources to the classes directory -->
669        <!--
670        <copy todir="${code.dir}" preservelastmodified="true">
671            <fileset dir="${code.src.dir}">
672                <include name="**/*.properties"/>
673                <include name="**/*.directives"/>
674                <include name="**/*.sql"/>
675                <include name="**/*.key" />
676                <include name="**/*.xml" />
677                                <include name="**/*.csv" />
678                <include name="**/character-sets*"/>
679            </fileset>
680        </copy>
681        -->
682    </target>
683    <target name="code.tests.init" depends="project.init, app.install.check, app.install.fail">
684        <echo>${descr.init} ${code.tests}</echo>
685        <mkdir dir="${code.tests.dir}" />
686
687        <!-- copy assorted resources to the classes_tests directory -->
688        <!--
689        <copy todir="${code.tests.dir}" preservelastmodified="true">
690            <fileset dir="${code.tests.src.dir}">
691                <include name="**/*.properties"/>
692                <include name="**/*.directives"/>
693                <include name="**/*.sql"/>
694                <include name="**/*.key" />
695                <include name="**/*.xml" />
696              <include name="**/character-sets*"/>
697            </fileset>
698        </copy>
699        -->
700    </target>
701
702    <target name="code.clean" description="Clean up code" >
703        <echo>${descr.clean} ${code}</echo>
704        <delete dir="${code.dir}" quiet="true" />
705    </target>
706    <target name="code.tests.clean" description="Clean up code unit tests" >
707        <echo>${descr.clean} ${code.tests}</echo>
708        <delete dir="${code.tests.dir}" quiet="true" />
709    </target>
710
711    <target name="code" depends="code.init" description="Build code">
712        <echo>${code}</echo>
713        <javac
714            srcdir="${code.src.dir}"
715            destdir="${code.dir}"
716            includes="**/*.java"
717            excludes="**/old*/**, ${tasks.pkg.path}/**"
718            classpathref="code.classpath.build"
719            compiler="${javac.compiler}"
720            debug="${javac.debug}"
721            optimize="${javac.optimize}"
722            deprecation="${javac.deprecation}"
723            verbose="${javac.verbose}"
724            nowarn="${javac.nowarn}"
725            target="${build.target.vm.version}"
726        >
727            <compilerarg value="-Xlint:deprecation"/>
728            <compilerarg value="-Xlint:unchecked"/>
729        </javac>
730    </target>
731    <target name="code.production" depends="code.init" description="Build code (for production)">
732        <echo>${code}</echo>
733        <javac
734            srcdir="${code.src.dir}"
735            destdir="${code.dir}"
736            includes="**/*.java"
737            excludes="**/old*/**, ${tasks.pkg.path}/**"
738            classpathref="code.classpath.build"
739            compiler="${javac.compiler.production}"
740            debug="${javac.debug.production}"
741            optimize="${javac.optimize.production}"
742            deprecation="${javac.deprecation.production}"
743            verbose="${javac.verbose.production}"
744            nowarn="${javac.nowarn.production}"
745            target="${build.target.vm.version}"
746        />
747    </target>
748    <target name="code.tests" depends="code, code.tests.init" description="Build code unit tests" >
749        <echo>${code.tests}</echo>
750        <javac
751            srcdir="${code.tests.src.dir}"
752            destdir="${code.tests.dir}"
753            includes="**/*.java"
754            excludes="**/old*/**"
755            classpathref="code.tests.classpath.build"
756            compiler="${javac.compiler}"
757            debug="${javac.debug}"
758            optimize="${javac.optimize}"
759            deprecation="${javac.deprecation}"
760            verbose="${javac.verbose}"
761            nowarn="${javac.nowarn}"
762            target="${build.target.vm.version}"
763        >
764            <compilerarg value="-Xlint:deprecation"/>
765            <compilerarg value="-Xlint:unchecked"/>
766        </javac>
767    </target>
768
769    <target name="code.files" if="code.files" description="Compile a defined set of files">
770        <echo>${code}</echo>
771        <javac srcdir="${code.src.dir}"
772            destdir="${code.dir}"
773            includes="${code.files}"
774            classpathref="code.classpath.build"
775            debug="${javac.debug}"
776            optimize="${javac.optimize}"
777            deprecation="${javac.deprecation}"
778            verbose="${javac.verbose}"
779            nowarn="false"
780            target="${build.target.vm.version}"
781        >
782            <compilerarg value="-Xlint:deprecation"/>
783            <compilerarg value="-Xlint:unchecked"/>
784        </javac>
785    </target>
786    <target name="code.tests.files" if="code.tests.files" description="Compile a defined set of test files">
787        <javac srcdir="${code.tests.src.dir}"
788            destdir="${code.tests.dir}"
789            includes="${code.tests.files}"
790            classpathref="code.tests.classpath.build"
791            debug="${javac.debug}"
792            optimize="${javac.optimize}"
793            deprecation="${javac.deprecation}"
794            verbose="${javac.verbose}"
795            nowarn="${javac.nowarn}"
796            target="${build.target.vm.version}"
797        >
798            <compilerarg value="-Xlint:deprecation"/>
799            <compilerarg value="-Xlint:unchecked"/>
800        </javac>
801    </target>
802
803    <target name="code.debug" description="Debug a class file">
804        <nbjpdastart addressproperty="jpda.address" name="${app.name}" transport="dt_socket">
805            <classpath refid="code.classpath"/>
806        </nbjpdastart>
807        <input addproperty="code.debug.args">Enter arguments:</input>
808        <java classname="${code.debug.class}" 
809              fork="true">
810            <classpath refid="code.classpath"/>
811            <jvmarg value="-Xdebug"/>
812            <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
813            <assertions refid="code.debug.assertions"/>
814            <arg line="${code.debug.args}"/>
815        </java>
816    </target>
817    <target name="code.tests.debug" description="Debug a test class file">
818        <nbjpdastart addressproperty="jpda.address" name="${app.name}" transport="dt_socket">
819            <classpath refid="code.tests.classpath"/>
820        </nbjpdastart>
821        <input addproperty="code.tests.debug.args">Enter arguments:</input>
822        <java classname="${code.tests.debug.class}" 
823              fork="true">
824            <classpath refid="code.tests.classpath"/>
825            <jvmarg value="-Xdebug"/>
826            <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}"/>
827            <assertions refid="code.tests.debug.assertions"/>
828            <arg line="${code.tests.debug.args}"/>
829        </java>
830    </target>
831
832    <target name="code.exec" description="Execute a class file">
833        <echo>${code}</echo>
834        <input addproperty="code.exec.class">Enter full class name (e.g. ${app.pkg}.FooBar):</input>
835        <input addproperty="code.exec.args">Enter arguments:</input>
836        <java classname="${code.exec.class}"
837              fork="true"
838              dir="${app.dir}"
839              failonerror="true"
840              classpathref="code.classpath">
841            <jvmarg value="-Xmx512M"/>
842            <jvmarg value="-ea"/>
843            <syspropertyset refid="proxy.properties"/>
844            <assertions refid="code.exec.assertions"/>
845            <arg line="${code.exec.args}"/>
846        </java>
847    </target>
848    <target name="code.tests.exec" description="Execute a test class file">
849        <echo>${code.tests}</echo>
850        <input addproperty="code.tests.exec.class">Enter full test class name (e.g. ${app.pkg}.TestFooBar):</input>
851        <input addproperty="code.tests.exec.args">Enter arguments:</input>
852        <java classname="${code.tests.exec.class}"
853              fork="true"
854              dir="${app.dir}"
855              failonerror="true"
856              classpathref="code.tests.classpath">
857            <jvmarg value="-Xmx256M"/>
858            <jvmarg value="-ea"/>
859            <syspropertyset refid="proxy.properties"/>
860            <assertions refid="code.tests.exec.assertions"/>
861            <arg value="batch=true"/>
862            <arg line="${code.tests.exec.args}"/>
863        </java>
864    </target>
865
866
867
868
869
870    <!-- ======================================================= -->
871    <!-- TESTS - Test Suites                                     -->
872    <!-- ======================================================= -->
873
874    <target name="tests.clean" depends="code.tests.clean" description="Clean up all tests">
875        <echo>${descr.clean} ${tests}</echo>
876        <delete quiet="true" includeEmptyDirs="true">
877            <fileset dir="${tests.dir}" excludes="**/sample.*" />
878        </delete>
879        <delete dir="${code.tests.dir}" quiet="true"/>
880    </target>
881    <target name="tests.init" depends="project.init">
882        <echo>${descr.init} ${tests}</echo>
883    </target>
884    <target name="tests" depends="code.tests, tests.init" description="Build all tests">
885        <echo>${tests}</echo>
886    </target>
887
888    <target name="tests.run" depends="tests" description="Run all tests as a batch">
889        <echo>${tests}</echo>
890        <!-- FIXME
891        <antcall target="tests.junit.batch">
892            <param name="tests.junit.batch" value="code.tests.src.files"/>
893        </antcall>
894        <antcall target="tests.open"/>
895        -->
896    </target>
897
898    <target name="tests.open" description="Open browser pointed to test results">
899        <exec executable="${browser.executable}">
900            <arg file="${tests.dir}/index.html"/>
901        </exec>
902    </target>
903</project>
904
Note: See TracBrowser for help on using the repository browser.