support for parameters on actions.
[utils] / build / header.xml
1 <!-- PROPERTIES -->
2
3 <target name="echoUserPropertiesFileFound" if="user.properties.found">
4   <echo>Using properties file ${user.property.file}</echo>
5 </target>
6     
7 <target name="echoUserPropertiesFileNotFound" unless="user.properties.found">
8   <echo>Properties file ${user.property.file} not found, reverting to defaults</echo>
9 </target>
10
11
12 <property name="project.home" value=".."/>
13 <property name="build.dir" value="${project.home}/build"/>
14 <property name="lib.dir" value="${project.home}/lib"/>
15 <property environment="env"/>
16
17 <target name="download.dep">
18   <if>
19     <isset property="proxyhost"/>
20     <then>
21       <setproxy proxyhost="${proxyhost}" proxyport="${proxyport}"/>
22     </then>
23   </if>
24   <if>
25     <isset property="artifact"/>
26     <then>
27       <echo>Getting dependence ${group}/${artifact}/${version}</echo>
28       <dependencies verbose="true" fileSetId="my.deps"> 
29         <dependency group="${group}" artifact="${artifact}" version="${version}"/>
30       </dependencies> 
31       <copy todir="${download.dir}" flatten="yes">
32         <fileset refid="my.deps"/>
33       </copy>
34     </then>
35     <else>
36       <echo>Getting dependence ${group}/${version}</echo>
37       <dependencies verbose="true" fileSetId="my.deps"> 
38         <dependency group="${group}" version="${version}"/>
39       </dependencies> 
40       <copy todir="${download.dir}" flatten="yes">
41         <fileset refid="my.deps"/>
42       </copy>
43     </else>
44   </if>
45 </target>
46
47 <!-- LOG4j -->    
48 <target name="log4j.d">
49   <antcall target="download.dep">
50     <param name="group" value="log4j"/>
51     <param name="version" value="1.2.9"/>
52   </antcall>
53 </target>
54
55 <target name="commons-beanutils.d">
56   <antcall target="download.dep">
57     <param name="group" value="commons-beanutils"/>
58     <param name="version" value="1.7.0"/>
59   </antcall>
60 </target>
61
62 <target name="commons-collections.d">
63   <antcall target="download.dep">
64     <param name="group" value="commons-collections"/>
65     <param name="version" value="3.1"/>
66   </antcall>
67 </target>
68
69
70 <target name="commons-logging.d">
71   <antcall target="download.dep">
72     <param name="group" value="commons-logging"/>
73     <param name="artifact" value="commons-logging"/>
74     <param name="version" value="1.0.2"/>
75   </antcall>
76 </target>
77
78 <target name="commons-codec.d">
79   <antcall target="download.dep">
80     <param name="group" value="commons-codec"/>
81     <param name="version" value="1.3"/>
82   </antcall>
83 </target>
84
85 <target name="commons-email.d">
86   <antcall target="download.dep">
87     <param name="group" value="commons-email"/>
88     <param name="version" value="1.0"/>
89   </antcall>
90 </target>
91
92 <target name="servletapi.d">
93   <antcall target="download.dep">
94     <param name="group" value="servletapi"/>
95     <param name="version" value="2.4"/>
96   </antcall>
97 </target>
98
99 <target name="jstl.d">
100   <antcall target="download.dep">
101     <param name="group" value="jstl"/>
102     <param name="version" value="1.1.2"/>
103   </antcall>
104   <antcall target="download.dep">
105     <param name="group" value="taglibs"/>
106         <param name="artifact" value="standard"/>
107     <param name="version" value="1.1.2"/>
108   </antcall>
109 </target>
110
111
112
113 <target name="quartz.d">
114   <antcall target="download.dep">
115     <param name="group" value="quartz"/>
116     <param name="version" value="1.5.1"/>
117   </antcall>
118 </target>
119
120
121
122 <target name="logging.d" depends="log4j.d,commons-logging.d">
123 </target>
124
125 <target name="dom4j.d">
126   <antcall target="download.dep">
127     <param name="group" value="dom4j"/>
128     <param name="version" value="1.6"/>
129   </antcall>
130   <antcall target="download.dep">
131     <param name="group" value="jaxen"/>
132     <param name="version" value="1.1-beta-4"/>
133   </antcall>
134 </target>
135
136 <target name="jfreechart.d">
137   <copy todir="${download.dir}">
138     <fileset dir="${special.lib.dir}/jfreechart-1.0.1">
139       <include name="*.jar"/>
140     </fileset>
141   </copy>
142 </target>
143
144 <target name="ehcache.d">
145   <antcall target="download.dep">
146     <param name="group" value="ehcache"/>
147     <param name="version" value="1.1"/>
148   </antcall>
149 </target>
150
151 <target name="xerces.d">
152   <antcall target="download.dep">
153     <param name="group" value="xerces"/>
154     <param name="version" value="2.4.0"/>
155   </antcall>
156 </target>
157
158 <target name="oro.d">
159   <antcall target="download.dep">
160     <param name="group" value="oro"/>
161     <param name="version" value="2.0.6"/>
162   </antcall>
163 </target>
164
165 <target name="cglib.d">
166   <antcall target="download.dep">
167     <param name="group" value="cglib"/>
168     <param name="version" value="2.1"/>
169   </antcall>
170 </target>
171
172 <target name="hibernate.d" depends="cglib.d,oro.d">
173   <antcall target="download.dep">
174     <param name="group" value="hibernate"/>
175     <param name="version" value="3.0.5"/>
176   </antcall>
177 </target>
178
179 <target name="hibernate.standalone.d" depends="hibernate.d">
180   <copy todir="${download.dir}">
181     <fileset dir="${special.lib.dir}/hibernate">
182        <include name="*.jar"/>
183     </fileset>
184   </copy>
185 </target>
186
187 <target name="spring.d">
188   <antcall target="download.dep">
189     <param name="group" value="springframework"/>
190     <param name="artifact" value="spring"/>
191     <param name="version" value="1.2.5"/>
192   </antcall>
193 </target>
194
195 <target name="activation.d">
196   <copy todir="${download.dir}">
197     <fileset dir="${special.lib.dir}/jaf-1.0.2">
198        <include name="*.jar"/>
199     </fileset>
200   </copy>
201 </target>
202
203 <target name="mail.d" depends="activation.d">
204   <copy todir="${download.dir}">
205     <fileset dir="${special.lib.dir}/javamail-1.3.3_01">
206        <include name="*.jar"/>
207     </fileset>
208   </copy>
209 </target>
210
211
212
213 <target name="httpclient.d">
214   <antcall target="download.dep">
215     <param name="group" value="commons-httpclient"/>
216     <param name="version" value="3.0"/>
217   </antcall>
218 </target>
219
220 <target name="jtidy.d">
221   <antcall target="download.dep">
222     <param name="group" value="jtidy"/>
223     <param name="version" value="4aug2000r7-dev"/>
224   </antcall>
225 </target>
226
227 <property name="support.dist.dir" value="${lib.dir}/wamblee/support"/>
228 <target name="wamblee.support.d">
229   <copy todir="${download.dir}">
230     <fileset dir="${support.dist.dir}">
231       <include name="wamblee-support.jar"/>
232     </fileset>
233   </copy>
234 </target>
235 <target name="wamblee.support.test.d">
236   <copy todir="${download.dir}">
237     <fileset dir="${support.dist.dir}">
238       <include name="wamblee-support-test.jar"/>
239     </fileset>
240   </copy>
241 </target>
242
243
244 <target name="junit.d">
245   <antcall target="download.dep">
246     <param name="group" value="junit"/>
247     <param name="version" value="3.8.1"/>
248   </antcall>
249   <copy todir="${download.dir}">
250     <fileset dir="${special.lib.dir}/test">
251        <include name="*.jar"/>
252     </fileset>
253   </copy>
254 </target>
255
256 <target name="emma.d">
257   <antcall target="download.dep">
258     <param name="group" value="emma"/>
259     <param name="artifact" value="emma"/>
260     <param name="version" value="2.0.5312"/>
261   </antcall>
262   <antcall target="download.dep">
263     <param name="group" value="emma"/>
264     <param name="artifact" value="emma_ant"/>
265     <param name="version" value="2.0.5312"/>
266   </antcall>
267 </target>
268
269 <target name="jmock.d">
270   <antcall target="download.dep">
271     <param name="group" value="jmock"/>
272     <param name="artifact" value="jmock"/>
273     <param name="version" value="1.0.1"/>
274   </antcall>
275   <antcall target="download.dep">
276     <param name="group" value="jmock"/>
277     <param name="artifact" value="jmock-cglib"/>
278     <param name="version" value="1.0.1"/>
279   </antcall>
280 </target>
281
282 <target name="dbunit.d">
283   <antcall target="download.dep">
284     <param name="group" value="dbunit"/>
285     <param name="version" value="2.1"/>
286   </antcall>
287 </target>
288
289
290 <target name="antlr.d">
291   <antcall target="download.dep">
292     <param name="group" value="antlr"/>
293     <param name="version" value="2.7.2"/>
294   </antcall>
295 </target>
296
297 <target name="checkstyle.d" depends="antlr.d,commons-beanutils.d,commons-logging.d,commons-collections.d">
298   <antcall target="download.dep">
299     <param name="group" value="checkstyle"/>
300     <param name="version" value="4.1"/>
301   </antcall>
302 </target>
303
304 <!-- common test dependencies for all test code --> 
305 <target name="test.d" depends="junit.d,jmock.d,dbunit.d,emma.d">
306 </target>
307
308 <!-- downloaded dependencies for ant tasks --> 
309 <target name="ant.d" depends="checkstyle.d">
310 </target>
311
312
313
314  <target name="import_header" unless="build_header_included">
315  
316     <property name="ant.lib.dir" value="${build.dir}/lib/ant"/>
317     <property name="test.lib.dir" value="lib/test"/>
318     <property name="special.lib.dir" value="${build.dir}/lib/special"/>
319         <property name="ant.downloaded.lib.dir" value="${build.dir}/lib/ant/downloaded"/>
320
321         
322     <!-- ========================================================================================
323          Ant task defs
324          ======================================================================================== -->
325  
326     <!-- ant-contrib integration --> 
327     <property name="ant.contrib.home" value="${ant.lib.dir}/ant-contrib-1.0b2"/>
328     <taskdef resource="net/sf/antcontrib/antlib.xml">
329       <classpath>
330         <pathelement location="${ant.contrib.home}/ant-contrib.jar" />
331       </classpath>
332     </taskdef>
333     
334     <!-- taskdef for ant-dependencies task --> 
335     <taskdef name="dependencies" classpath="${ant.lib.dir}/ant-dependencies.jar" 
336       classname="org.apache.tools.ant.taskdefs.optional.dependencies.Dependencies"/>
337   
338     <!-- Emma integration --> 
339         <if>
340           <available file="${test.lib.dir}"/>
341           <then>
342         <path id="emma.lib">
343           <fileset dir="${test.lib.dir}" includes="emma*.jar"/>
344         </path>
345         <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
346         <property name="emma.enabled" value="false"/>
347           </then>
348     </if>
349     
350     <!-- checkstyle -->
351     <property name="checkstyle.home" value="${ant.downloaded.lib.dir}"/>
352     <taskdef resource="checkstyletask.properties">
353       <classpath>
354         <fileset dir="${checkstyle.home}">
355           <include name="*.jar"/>
356         </fileset>
357       </classpath>
358     </taskdef>
359     <property name="checkstyle.rules" value="style.xml"/>
360     <property name="checkstyle.test.rules" value="test-style.xml"/>
361     
362              
363     <!-- jalopy -->
364     <!-- TMP download this dependence as well 
365     <property name="jalopy.home" value="${lib.dir}/jalopy-ant-0.6.2"/>
366     <property name="jalopy.rules" value="${build.dir}/formatting-rules.xml"/>
367     <taskdef name="jalopy"
368          classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
369       <classpath>
370         <fileset dir="${jalopy.home}">
371           <include name="*.jar" />
372         </fileset>
373       </classpath>
374     </taskdef>
375     -->
376   
377     <!-- simian integration -->
378     <!-- TMP download this dependence as well 
379     <property name="simian.home" value="${lib.dir}/simian"/>
380     <taskdef resource="simiantask.properties" classpath="${simian.home}/simian.jar"/>
381     --> 
382     
383     <!-- macker integration -->
384     <!-- TMP download this dependence as well 
385     <property name="macker.home" value="${lib.dir}/macker-0.4.2"/>
386     <path id="macker.path">
387           <fileset dir="${macker.home}">
388             <include name="**/*.jar"/>
389           </fileset>
390     </path>
391     <taskdef name="macker"
392       classname="net.innig.macker.ant.MackerAntTask"
393       classpathref="macker.path"/>
394
395     --> 
396     
397     <!-- ========================================================================================
398          Locate user properties to (optionally) override defaults
399          ======================================================================================== -->
400  
401     <!--
402       Give user a chance to override without editing this file
403       (and without typing -D each time they run it).
404
405       The following properties must be defined in this file:
406       - jcoverage.home: root of the jcoverage installation. 
407       - jalopy.home: root of the jalopy installation. 
408     -->
409     <property name="user.property.file" value="${user.home}/wamblee.properties"/>
410     <available file="${user.property.file}" property="user.properties.found"/>
411     <property file="${user.property.file}"/>
412     
413     <antcall target="echoUserPropertiesFileFound"/>
414     <antcall target="echoUserPropertiesFileNotFound"/>
415
416     <!-- project properties defaults, can be overriden in the user's properties file -->
417     
418       <!--  The project.home property can also be overriden in a build.xml
419             in case the source is in a subdirectory and not necessarily
420             in the top-level directory --> 
421    
422   
423         <if>
424           <isset property="webroot.dir"/>
425           <then>
426             <property name="external.lib.dir" value="${webroot.dir}/WEB-INF/lib"/>
427           </then>
428           <else>
429             <property name="external.lib.dir" value="lib/external"/>
430           </else>
431         </if>
432    
433     <property name="build.properties.dir" value="${project.home}" />
434     <property name="build.properties.name" value="build.properties" />
435     
436     <mkdir dir="${external.lib.dir}"/>
437     <mkdir dir="${test.lib.dir}"/>
438     
439     <property name="conf.dir" value="conf"/>
440     <property name="log4j.properties.dir" value="${conf.dir}/properties"/>
441     
442     <!-- Compilation properties -->
443     <property name="javac.debug" value="true"/>
444     <property name="javac.debug.level" value="lines,vars,source"/>
445     <property name="javac.source" value="1.5"/>
446
447     <!-- ========================================================================================
448          Standard path definitions to be used with all projects 
449          ======================================================================================= -->
450     <property name="xmlschemas.dir" value="${conf.dir}/schemas"/>
451     <path id="xmlschemas.path">
452       <pathelement location="${xmlschemas.dir}"/>
453     </path>
454
455     <!-- ========================================================================================
456          Path definitions for external libraries.
457          ======================================================================================== -->
458  
459     <!-- Ignore system classpath! -->
460     <property name="build.sysclasspath" value="ignore" />
461
462     <!-- JUnit -->
463     <property name="junit.halt.on.failure" value="false"/>
464     <property name="unitreport" value="cl-unit.xml"/>
465     
466     <!-- DocCheck path -->
467     <property name="doccheck.home" value="${ant.lib.dir}/doccheck1.2b2/doccheck.jar"/>
468     <path id="doccheck.path">
469       <pathelement location="${doccheck.home}"/>
470     </path>
471     
472     <!-- PdfDoclet path -->
473     <property name="pdfdoclet.home" value="${ant.lib.dir}/pdfdoclet-1.0.2-all.jar"/>
474     <path id="pdfdoclet.path">
475       <pathelement location="${pdfdoclet.home}"/>
476     </path>
477         
478     <!-- Hibernate paths --> 
479     <!--  name of the file in the source directory containing
480           the names of hibernate files to look at in the correct order --> 
481     <property name="hibernate.home" value="${lib.dir}/hibernate-3.0"/>
482     <path id="hibernate.basic.path">
483       <fileset dir="${hibernate.home}">
484         <include name="*.jar"/>
485       </fileset>
486       <path refid="xerces.path"/>
487       <path refid="dom4j.path"/>
488     </path>
489     <path id="hibernate.appserver.path"> 
490       <path refid="hibernate.basic.path"/>
491       <fileset dir="${hibernate.home}/appserver">
492         <include name="*.jar"/>
493       </fileset>
494     </path>
495     <path id="hibernate.standalone.path"> 
496       <path refid="hibernate.basic.path"/>
497       <fileset dir="${hibernate.home}/standalone">
498         <include name="*.jar"/>
499       </fileset>
500     </path>
501
502     <!-- Commented the inclusion of a system-wide path in the user's environment into a 
503          classpath. System wide classpaths should not be used. -->
504     <!-- property name="classpath_id" value="build.path" / -->
505     <!-- property name="classpath" refid="${classpath_id}"/ -->
506     <property name="classpath" value=""/>
507     
508     
509     <!-- ========================================================================================
510          Database settings
511          ======================================================================================== -->
512     <property name="database" value="Derby"/>
513     
514   
515    
516     <!-- ========================================================================================
517          Information
518          ======================================================================================== -->
519     <echo level="debug" message="project.home=${project.home}"/>
520     <echo level="debug" message="project.libs=${project.libs}"/>
521     <echo level="debug" message="classpath=${classpath}"/>
522
523
524     <!-- ========================================================================================
525          Included marker
526          ======================================================================================== -->
527     <property name="build_header_included" value="true" />
528 </target>
529       
530 <!--  =================================================================
531      Sets up the directory definitions for the module
532      ================================================================= -->
533 <target name="init_directory_properties" depends="import_header">
534         <!-- Set module properties for this build -->
535
536         <property name="module.home" value="." />
537         
538         <!--  Replace the dash by a / to create a relative directory 
539               from a module name --> 
540         <propertyregex property="module.reldir" 
541                        input="${module.name}"
542                        regexp="-"
543                        replace="/"
544                        global="true"
545                        defaultValue="${module.name}"/>
546         <!-- property name="module.build.dir"
547                 value="${build.dir}/${module.reldir}" / -->
548     <property name="module.build.dir" value="build"/>
549         <property name="module.api.forrest.dir" value="${forrest.build.site.dir}/api/${module.name}" />
550         <if>
551           <isset property="webroot.dir"/>
552           <then>
553             <property name="module.classes.dir" value="${webroot.dir}/WEB-INF/classes" />
554           </then>
555           <else>
556             <property name="module.classes.dir" value="${module.build.dir}/bin" />
557           </else>
558         </if>
559         
560         <property name="module.testclasses.dir" value="${module.build.dir}/testbin" />
561         <!-- Directory where generated SQL will be put by the schema export-->
562         <property name="module.sql.dir" value="${module.build.dir}/sql" />
563
564
565         <property name="module.jcovclasses.dir"
566                 value="${module.build.dir}/testjcov" />
567         <property name="module.jars.dir" value="${module.build.dir}/jars" />
568         <property name="module.jar.file"
569                 value="${module.jars.dir}/${module.jar.name}" />
570         <property name="module.source.dir" value="${module.home}/src" />
571         <property name="module.forrest.src.dir" value="${module.home}/xdocs" />
572         <property name="module.ejbsource.dir" value="${module.home}/ejbsrc" />
573         <property name="module.test.dir" value="${module.home}/test" />
574         <property name="module.testjar.name"
575                 value="${module.name}-test.jar" />
576         <property name="module.testresourcesjar.name"
577                 value="${module.name}-test-resources.jar" />
578         <property name="module.resource.dir"
579                 value="${module.home}/resources" />
580         <property name="module.testresource.dir"
581                 value="${module.resource.dir}/test" />
582     <property name="module.testoutput.dir"
583         value="${module.resource.dir}/testoutput"/>
584         <property name="module.report.dir"
585                 value="${module.build.dir}/testresults" />
586         <property name="module.emmareport.dir"
587                 value="${module.report.dir}/html/emma"/>
588         <property name="module.docbase.dir"
589                 value="${module.build.dir}/docs" />
590         <property name="module.javadoc.dir"
591                 value="${module.docbase.dir}/api" />
592         <property name="module.javadocjar.name"
593                 value="${module.name}-doc.jar" />
594         <property name="module.testjavadocjar.name"
595                 value="${module.name}-test-doc.jar" />
596         <property name="module.testjavadoc.dir"
597                 value="${module.docbase.dir}/testapi" />
598         <property name="module.pdfdoc.dir"
599                 value="${module.docbase.dir}/pdf" />
600         <property name="module.doccheck.dir"
601                 value="${module.docbase.dir}/doccheck" />
602         <property name="module.checkstyle.dir"
603             value="${module.docbase.dir}/checkstyle" />
604         <property name="module.jar.name" value="${module.name}.jar" />
605         
606         <!--  Replace the dash by a / to create a relative directory 
607               from a module name --> 
608         <property name="module.dist.dir" value="${lib.dir}/${module.reldir}" />
609 </target>
610
611 <!-- ============================================================================
612   Initialize the environment for other tasks. Normally, every task which
613   does not depend on any other task should at least depend on init. 
614   ============================================================================ -->
615   
616   <target name="help" depends="import_header">
617     <antcall target="help-within-module"/>
618     <antcall target="help-outside-module"/>
619   </target>
620   
621   <target name="help-within-module" depends="init_directory_properties" if="module.name">
622     <antcall target="help-impl"/>
623   </target>
624   
625   <target name="help-outside-module" unless="module.name">
626     <antcall target="help-outside-module-2">
627       <param name="module.name" value="MODULE_NAME"/>
628     </antcall>
629   </target>
630   
631   <target name="help-outside-module-2" depends="init_directory_properties">
632     <antcall target="help-impl"/>
633   </target>
634   
635   
636   <target name="help-impl">
637     <echo>
638     
639       Preparation:
640       
641       To execute with a specific proxy host and port, start ant with the 
642       command-line options   -Dproxyhost=hostname -Dproxyport=portnumber.
643       
644       deps:          Download dependencies, this is necessary for using 
645                      any of the build targets.
646       clean-deps:    Remove downloaded dependencies. 
647       
648       General build targets: 
649       
650       clean:         Cleans up all build results (excluding the dist location).
651       compile:       Compiles all java clasess. Target dir ${module.classes.dir} 
652       jar:           Creates a jar file. Target: ${module.jar.file} 
653       dist:          Makes the build results available for other modules Target: ${module.dist.dir}. 
654       dist-lite:     Similar to dist but only creates the jars for code and test code. Useful
655                      during development because it takes much less time than the dist
656                      target
657       clean-dist:    Cleans up the dist directories. 
658       
659       Test: 
660       
661       test:          Compile and run tests. 
662       junit-reports: As test but generates a test report. Target: ${module.report.dir}(/html/unit) 
663       reports:       As junit-reports but also generates an emma test coverage
664                      report
665                      
666       Note: By specifying -Dtest=TestCaseName on the ant command line, 
667       only the specified testcase will be run. 
668       
669       Emma can also be executed manually:
670              
671          emma:          Overwrites the production classes by their instrumented versions.
672          emma-reports:  Generates emma code coverage reports after running the
673                         testcases with instrumented classes.
674       
675       Javadoc targets: 
676       
677       javadoc:       Generates javadoc. Target: ${module.javadoc.dir} 
678       doccheck:      Checks documentation. Target: ${module.doccheck.dir}
679           
680           Forrest:
681           
682           forrest:       Generates project docs using forrest. 
683       
684       Code analysis: 
685       
686       checkstyle:    Checks the style of the code. 
687       format:        Formats to the code in accordance with the checkstyle rules.
688       simian:        Analyse similarities in the code.
689           
690           Building a web application: 
691           
692           To build a web application archive (WAR) you must set the property
693           webroot.dir to the value of the directory which is the root of your
694           web application. This must be done before the header.xl is 
695           sourced. The build support will then make sure that 
696           classes and libs are put in the correct directories below 
697           ${webroot.dir}/WEB-INF, and it will build a web archive. 
698       
699       Database targets:  ** database targets are not functional yet **
700       
701       For all targets below the database is configured using 
702       hibernate.properties (hibernate.dialect property) and 
703       the JDBC connection properties in database.properties. 
704       
705       The schemaexport and schemaupdate targets require the 
706       setting of a property named hibernate.filelist. The value
707       of the property must be the fully qualified class name of
708       a concrete subclass of ConfigFileList which has a default 
709       public constructor and defines the Hibernate mapping files that
710       can be used. 
711       
712       schemaexport:  Generate SQL code to create the required database structures.
713       
714       startdb:       Startup a lightweight database. The database
715       type to start is obtained from the currently
716       configured database. 
717       
718       schemaupdate:  Populate the database with a schema by running
719       Hibernate schemaupdate against the currently
720       configured database.  
721     </echo>
722   </target>
723   
724