initial version of support project with build support.
[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
13 <target name="download.dep">
14   <if>
15     <isset property="artifact"/>
16     <then>
17       <echo>Getting dependence ${group}/${artifact}/${version}</echo>
18       <dependencies verbose="true" fileSetId="my.deps"> 
19         <dependency group="${group}" artifact="${artifact}" version="${version}"/>
20       </dependencies> 
21       <copy todir="${download.dir}" flatten="yes">
22         <fileset refid="my.deps"/>
23       </copy>
24     </then>
25     <else>
26       <echo>Getting dependence ${group}/${version}</echo>
27       <dependencies verbose="true" fileSetId="my.deps"> 
28         <dependency group="${group}" version="${version}"/>
29       </dependencies> 
30       <copy todir="${download.dir}" flatten="yes">
31         <fileset refid="my.deps"/>
32       </copy>
33     </else>
34   </if>
35 </target>
36
37 <!-- LOG4j -->    
38 <target name="log4j.d">
39   <antcall target="download.dep">
40     <param name="group" value="log4j"/>
41     <param name="version" value="1.2.9"/>
42   </antcall>
43 </target>
44
45 <target name="commons-logging.d">
46   <antcall target="download.dep">
47     <param name="group" value="commons-logging"/>
48     <param name="artifact" value="commons-logging"/>
49     <param name="version" value="1.0.2"/>
50   </antcall>
51 </target>
52
53 <target name="logging.d" depends="log4j.d,commons-logging.d">
54 </target>
55
56 <target name="dom4j.d">
57   <antcall target="download.dep">
58     <param name="group" value="dom4j"/>
59     <param name="version" value="1.6"/>
60   </antcall>
61 </target>
62
63 <target name="xerces.d">
64   <antcall target="download.dep">
65     <param name="group" value="ehcache"/>
66     <param name="version" value="1.1"/>
67   </antcall>
68 </target>
69
70 <target name="ehcache.d">
71   <antcall target="download.dep">
72     <param name="group" value="xerces"/>
73     <param name="version" value="2.4.0"/>
74   </antcall>
75 </target>
76
77 <target name="oro.d">
78   <antcall target="download.dep">
79     <param name="group" value="oro"/>
80     <param name="version" value="2.0.6"/>
81   </antcall>
82 </target>
83
84 <target name="cglib.d">
85   <antcall target="download.dep">
86     <param name="group" value="cglib"/>
87     <param name="version" value="2.1"/>
88   </antcall>
89 </target>
90
91 <target name="hibernate.d" depends="cglib.d,oro.d">
92   <antcall target="download.dep">
93     <param name="group" value="hibernate"/>
94     <param name="version" value="3.0.5"/>
95   </antcall>
96 </target>
97
98 <target name="hibernate.standalone.d" depends="hibernate.d">
99   <copy todir="${download.dir}">
100     <fileset dir="${special.lib.dir}/hibernate">
101        <include name="*.jar"/>
102     </fileset>
103   </copy>
104 </target>
105
106 <target name="spring.d">
107   <antcall target="download.dep">
108     <param name="group" value="springframework"/>
109     <param name="artifact" value="spring"/>
110     <param name="version" value="1.2.5"/>
111   </antcall>
112 </target>
113
114 <target name="junit.d">
115   <antcall target="download.dep">
116     <param name="group" value="junit"/>
117     <param name="version" value="3.8.1"/>
118   </antcall>
119   <copy todir="${download.dir}">
120     <fileset dir="${special.lib.dir}/test">
121        <include name="*.jar"/>
122     </fileset>
123   </copy>
124 </target>
125
126 <target name="emma.d">
127   <antcall target="download.dep">
128     <param name="group" value="emma"/>
129     <param name="artifact" value="emma"/>
130     <param name="version" value="2.0.5312"/>
131   </antcall>
132   <antcall target="download.dep">
133     <param name="group" value="emma"/>
134     <param name="artifact" value="emma_ant"/>
135     <param name="version" value="2.0.5312"/>
136   </antcall>
137 </target>
138
139 <target name="jmock.d">
140   <antcall target="download.dep">
141     <param name="group" value="jmock"/>
142     <param name="artifact" value="jmock"/>
143     <param name="version" value="1.0.1"/>
144   </antcall>
145   <antcall target="download.dep">
146     <param name="group" value="jmock"/>
147     <param name="artifact" value="jmock-cglib"/>
148     <param name="version" value="1.0.1"/>
149   </antcall>
150 </target>
151
152 <target name="dbunit.d">
153   <antcall target="download.dep">
154     <param name="group" value="dbunit"/>
155     <param name="version" value="2.1"/>
156   </antcall>
157 </target>
158
159 <!-- common test dependencies for all test code --> 
160 <target name="test.d" depends="junit.d,jmock.d,dbunit.d,emma.d">
161 </target>
162
163
164
165  <target name="import_header" unless="build_header_included">
166     
167     <!-- ========================================================================================
168          Locate user properties to (optionally) override defaults
169          ======================================================================================== -->
170  
171     <!--
172       Give user a chance to override without editing this file
173       (and without typing -D each time they run it).
174
175       The following properties must be defined in this file:
176       - jcoverage.home: root of the jcoverage installation. 
177       - jalopy.home: root of the jalopy installation. 
178     -->
179     <property name="user.property.file" value="${user.home}/wamblee.properties"/>
180     <available file="${user.property.file}" property="user.properties.found"/>
181     <property file="${user.property.file}"/>
182     
183     <antcall target="echoUserPropertiesFileFound"/>
184     <antcall target="echoUserPropertiesFileNotFound"/>
185
186     <!-- project properties defaults, can be overriden in the user's properties file -->
187     
188       <!--  The project.home property can also be overriden in a build.xml
189             in case the source is in a subdirectory and not necessarily
190             in the top-level directory --> 
191     <property name="project.home" value=".."/>
192     <property name="build.dir" value="${project.home}/build"/>
193     <property name="lib.dir" value="${project.home}/lib/wamblee"/>
194     <property name="ant.lib.dir" value="${project.home}/lib/ant"/>
195     <property name="external.lib.dir" value="lib/external"/>
196     <property name="test.lib.dir" value="lib/test"/>
197     <property name="special.lib.dir" value="${project.home}/lib/special"/>
198     <property name="forrest.xdocs.dir" value="${project.home}/site/xdocs"/>
199     <property name="forrest.build.dir" value="${project.home}/site/build"/>
200     <property name="forrest.build.site.dir" value="${forrest.build.dir}/site"/>
201     <property name="build.properties.dir" value="${project.home}" />
202     <property name="build.properties.name" value="build.properties" />
203     
204     <mkdir dir="${external.lib.dir}"/>
205     <mkdir dir="${test.lib.dir}"/>
206     
207     <property name="conf.dir" value="conf"/>
208     <property name="log4j.properties.dir" value="${conf.dir}/properties"/>
209     
210     <!-- Compilation properties -->
211     <property name="javac.debug" value="true"/>
212     <property name="javac.debug.level" value="lines,vars,source"/>
213     <property name="javac.source" value="1.5"/>
214
215     <!-- ========================================================================================
216          Standard path definitions to be used with all projects 
217          ======================================================================================= -->
218     <property name="xmlschemas.dir" value="${conf.dir}/schemas"/>
219     <path id="xmlschemas.path">
220       <pathelement location="${xmlschemas.dir}"/>
221     </path>
222
223     <!-- ========================================================================================
224          Path definitions for external libraries.
225          ======================================================================================== -->
226  
227     <!-- Ignore system classpath! -->
228     <property name="build.sysclasspath" value="ignore" />
229
230     <!-- JUnit -->
231     <property name="junit.halt.on.failure" value="false"/>
232     <property name="unitreport" value="cl-unit.xml"/>
233         
234     <!-- Hibernate paths --> 
235     <!--  name of the file in the source directory containing
236           the names of hibernate files to look at in the correct order --> 
237     <property name="hibernate.home" value="${lib.dir}/hibernate-3.0"/>
238     <path id="hibernate.basic.path">
239       <fileset dir="${hibernate.home}">
240         <include name="*.jar"/>
241       </fileset>
242       <path refid="xerces.path"/>
243       <path refid="dom4j.path"/>
244     </path>
245     <path id="hibernate.appserver.path"> 
246       <path refid="hibernate.basic.path"/>
247       <fileset dir="${hibernate.home}/appserver">
248         <include name="*.jar"/>
249       </fileset>
250     </path>
251     <path id="hibernate.standalone.path"> 
252       <path refid="hibernate.basic.path"/>
253       <fileset dir="${hibernate.home}/standalone">
254         <include name="*.jar"/>
255       </fileset>
256     </path>
257
258     <!-- Commented the inclusion of a system-wide path in the user's environment into a 
259          classpath. System wide classpaths should not be used. -->
260     <!-- property name="classpath_id" value="build.path" / -->
261     <!-- property name="classpath" refid="${classpath_id}"/ -->
262     <property name="classpath" value=""/>
263     
264     
265     <!-- ========================================================================================
266          Database settings
267          ======================================================================================== -->
268     <property name="database" value="Derby"/>
269     
270     <!-- ========================================================================================
271          Ant task defs
272          ======================================================================================== -->
273  
274     <!-- ant-contrib integration --> 
275     <property name="ant.contrib.home" value="${ant.lib.dir}/ant-contrib-1.0b2"/>
276     <taskdef resource="net/sf/antcontrib/antlib.xml">
277       <classpath>
278         <pathelement location="${ant.contrib.home}/ant-contrib.jar" />
279       </classpath>
280     </taskdef>
281     
282     <!-- taskdef for ant-dependencies task --> 
283     <taskdef name="dependencies" classpath="${ant.lib.dir}/ant-dependencies.jar" 
284       classname="org.apache.tools.ant.taskdefs.optional.dependencies.Dependencies"/>
285   
286     <!-- Emma integration --> 
287     <path id="emma.lib">
288       <fileset dir="${test.lib.dir}" includes="emma*.jar"/>
289     </path>
290     <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
291     <property name="emma.enabled" value="false"/>
292     
293     <!-- checkstyle -->
294     <!-- TMP download this dependence as well 
295     <property name="checkstyle.home" value="${lib.dir}/checkstyle-3.5"/>
296     <taskdef resource="checkstyletask.properties"
297              classpath="${checkstyle.home}/checkstyle-all-3.5.jar"/>
298     <property name="checkstyle.rules" value="coding-rules.xml"/>
299     <property name="checkstyle.test.rules" value="coding-rules-test.xml"/>
300     --> 
301              
302     <!-- jalopy -->
303     <!-- TMP download this dependence as well 
304     <property name="jalopy.home" value="${lib.dir}/jalopy-ant-0.6.2"/>
305     <property name="jalopy.rules" value="${build.dir}/formatting-rules.xml"/>
306     <taskdef name="jalopy"
307          classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
308       <classpath>
309         <fileset dir="${jalopy.home}">
310           <include name="*.jar" />
311         </fileset>
312       </classpath>
313     </taskdef>
314     -->
315   
316     <!-- simian integration -->
317     <!-- TMP download this dependence as well 
318     <property name="simian.home" value="${lib.dir}/simian"/>
319     <taskdef resource="simiantask.properties" classpath="${simian.home}/simian.jar"/>
320     --> 
321     
322     <!-- macker integration -->
323     <!-- TMP download this dependence as well 
324     <property name="macker.home" value="${lib.dir}/macker-0.4.2"/>
325     <path id="macker.path">
326           <fileset dir="${macker.home}">
327             <include name="**/*.jar"/>
328           </fileset>
329     </path>
330     <taskdef name="macker"
331       classname="net.innig.macker.ant.MackerAntTask"
332       classpathref="macker.path"/>
333
334     --> 
335    
336     <!-- ========================================================================================
337          Information
338          ======================================================================================== -->
339     <echo level="debug" message="project.home=${project.home}"/>
340     <echo level="debug" message="project.libs=${project.libs}"/>
341     <echo level="debug" message="classpath=${classpath}"/>
342
343
344     <!-- ========================================================================================
345          Included marker
346          ======================================================================================== -->
347     <property name="build_header_included" value="true" />
348 </target>
349       
350 <!--  =================================================================
351      Sets up the directory definitions for the module
352      ================================================================= -->
353 <target name="init_directory_properties" depends="import_header">
354         <!-- Set module properties for this build -->
355
356         <property name="module.home" value="." />
357         
358         <!--  Replace the dash by a / to create a relative directory 
359               from a module name --> 
360         <propertyregex property="module.reldir" 
361                        input="${module.name}"
362                        regexp="-"
363                        replace="/"
364                        global="true"
365                        defaultValue="${module.name}"/>
366         <property name="module.build.dir"
367                 value="${build.dir}/${module.reldir}" />
368
369         <property name="module.api.forrest.dir" value="${forrest.build.site.dir}/api/${module.name}" />
370         <!-- property name="module.classes.dir"     value="${module.build.dir}/bin"/ -->
371         <!-- property name="module.testclasses.dir" value="${module.build.dir}/testbin"/ -->
372         <property name="module.classes.dir" value="bin" />
373         <property name="module.testclasses.dir" value="testbin" />
374         <!-- Directory where generated SQL will be put by the schema export-->
375         <property name="module.sql.dir" value="${module.build.dir}/sql" />
376
377
378         <property name="module.jcovclasses.dir"
379                 value="${module.build.dir}/testjcov" />
380         <property name="module.jars.dir" value="${module.build.dir}/jars" />
381         <property name="module.jar.file"
382                 value="${module.jars.dir}/${module.jar.name}" />
383         <property name="module.source.dir" value="${module.home}/src" />
384         <property name="module.forrest.src.dir" value="${module.home}/xdocs" />
385         <property name="module.ejbsource.dir" value="${module.home}/ejbsrc" />
386         <property name="module.test.dir" value="${module.home}/test" />
387         <property name="module.testjar.name"
388                 value="${module.name}-test.jar" />
389         <property name="module.testresourcesjar.name"
390                 value="${module.name}-test-resources.jar" />
391         <property name="module.resource.dir"
392                 value="${module.home}/resources" />
393         <property name="module.testresource.dir"
394                 value="${module.resource.dir}/test" />
395     <property name="module.testoutput.dir"
396         value="${module.resource.dir}/testoutput"/>
397         <property name="module.report.dir"
398                 value="${module.build.dir}/testresults" />
399         <property name="module.emmareport.dir"
400                 value="${module.report.dir}/html/emma"/>
401         <property name="module.docbase.dir"
402                 value="${module.build.dir}/javadoc" />
403         <property name="module.javadoc.dir"
404                 value="${module.docbase.dir}/api" />
405         <property name="module.javadocjar.name"
406                 value="${module.name}-doc.jar" />
407         <property name="module.testjavadocjar.name"
408                 value="${module.name}-test-doc.jar" />
409         <property name="module.testjavadoc.dir"
410                 value="${module.docbase.dir}/testapi" />
411         <property name="module.pdfdoc.dir"
412                 value="${module.docbase.dir}/pdf" />
413         <property name="module.doccheck.dir"
414                 value="${module.docbase.dir}/doccheck" />
415         <property name="module.jar.name" value="${module.name}.jar" />
416         
417         <!--  Replace the dash by a / to create a relative directory 
418               from a module name --> 
419         <property name="module.dist.dir" value="${lib.dir}/${module.reldir}" />
420 </target>
421
422 <!-- ============================================================================
423   Initialize the environment for other tasks. Normally, every task which
424   does not depend on any other task should at least depend on init. 
425   ============================================================================ -->
426   
427   <target name="help" depends="import_header">
428     <antcall target="help-within-module"/>
429     <antcall target="help-outside-module"/>
430   </target>
431   
432   <target name="help-within-module" depends="init_directory_properties" if="module.name">
433     <antcall target="help-impl"/>
434   </target>
435   
436   <target name="help-outside-module" unless="module.name">
437     <antcall target="help-outside-module-2">
438       <param name="module.name" value="MODULE_NAME"/>
439     </antcall>
440   </target>
441   
442   <target name="help-outside-module-2" depends="init_directory_properties">
443     <antcall target="help-impl"/>
444   </target>
445   
446   
447   <target name="help-impl">
448     <echo>
449       General build targets: 
450       
451       clean:         Cleans up all build results (excluding the dist location).
452       compile:       Compiles all java clasess. Target dir ${module.classes.dir} 
453       jar:           Creates a jar file. Target: ${module.jar.file} 
454       dist:          Makes the build results available for other modules Target: ${module.dist.dir}. 
455       dist-lite:     Similar to dist but only creates the jars for code and test code. Useful
456                      during development because it takes much less time than the dist
457                      target
458       clean-dist:    Cleans up the dist directories. 
459       
460       Test: 
461       
462       test:          Compile and run tests. 
463       junit-reports: As test but generates a test report. Target: ${module.report.dir}(/html/unit) 
464       reports:       As junit-reports but also generates an emma test coverage
465                      report
466                      
467       Note: By specifying -Dtest=TestCaseName on the ant command line, 
468       only the specified testcase will be run. 
469       
470       Emma can also be executed manually:
471              
472          emma:          Overwrites the production classes by their instrumented versions.
473          emma-reports:  Generates emma code coverage reports after running the
474                         testcases with instrumented classes.
475       
476       Javadoc targets: 
477       
478       javadoc:       Generates javadoc. Target: ${module.javadoc.dir} 
479       doccheck:      Checks documentation. Target: ${module.doccheck.dir}
480       
481       Code analysis: 
482       
483       checkstyle:    Checks the style of the code. 
484       format:        Formats to the code in accordance with the checkstyle rules.
485       simian:        Analyse similarities in the code.
486       
487       Database targets: 
488       
489       For all targets below the database is configured using 
490       hibernate.properties (hibernate.dialect property) and 
491       the JDBC connection properties in database.properties. 
492       
493       The schemaexport and schemaupdate targets require the 
494       setting of a property named hibernate.filelist. The value
495       of the property must be the fully qualified class name of
496       a concrete subclass of ConfigFileList which has a default 
497       public constructor and defines the Hibernate mapping files that
498       can be used. 
499       
500       schemaexport:  Generate SQL code to create the required database structures.
501       
502       startdb:       Startup a lightweight database. The database
503       type to start is obtained from the currently
504       configured database. 
505       
506       schemaupdate:  Populate the database with a schema by running
507       Hibernate schemaupdate against the currently
508       configured database.  
509     </echo>
510   </target>
511   
512