acea5089780be7f60fde2f501a30c1ca08a4e5d9
[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     <!-- DocCheck path -->
235     <property name="doccheck.home" value="${ant.lib.dir}/doccheck1.2b2/doccheck.jar"/>
236     <path id="doccheck.path">
237       <pathelement location="${doccheck.home}"/>
238     </path>
239         
240     <!-- Hibernate paths --> 
241     <!--  name of the file in the source directory containing
242           the names of hibernate files to look at in the correct order --> 
243     <property name="hibernate.home" value="${lib.dir}/hibernate-3.0"/>
244     <path id="hibernate.basic.path">
245       <fileset dir="${hibernate.home}">
246         <include name="*.jar"/>
247       </fileset>
248       <path refid="xerces.path"/>
249       <path refid="dom4j.path"/>
250     </path>
251     <path id="hibernate.appserver.path"> 
252       <path refid="hibernate.basic.path"/>
253       <fileset dir="${hibernate.home}/appserver">
254         <include name="*.jar"/>
255       </fileset>
256     </path>
257     <path id="hibernate.standalone.path"> 
258       <path refid="hibernate.basic.path"/>
259       <fileset dir="${hibernate.home}/standalone">
260         <include name="*.jar"/>
261       </fileset>
262     </path>
263
264     <!-- Commented the inclusion of a system-wide path in the user's environment into a 
265          classpath. System wide classpaths should not be used. -->
266     <!-- property name="classpath_id" value="build.path" / -->
267     <!-- property name="classpath" refid="${classpath_id}"/ -->
268     <property name="classpath" value=""/>
269     
270     
271     <!-- ========================================================================================
272          Database settings
273          ======================================================================================== -->
274     <property name="database" value="Derby"/>
275     
276     <!-- ========================================================================================
277          Ant task defs
278          ======================================================================================== -->
279  
280     <!-- ant-contrib integration --> 
281     <property name="ant.contrib.home" value="${ant.lib.dir}/ant-contrib-1.0b2"/>
282     <taskdef resource="net/sf/antcontrib/antlib.xml">
283       <classpath>
284         <pathelement location="${ant.contrib.home}/ant-contrib.jar" />
285       </classpath>
286     </taskdef>
287     
288     <!-- taskdef for ant-dependencies task --> 
289     <taskdef name="dependencies" classpath="${ant.lib.dir}/ant-dependencies.jar" 
290       classname="org.apache.tools.ant.taskdefs.optional.dependencies.Dependencies"/>
291   
292     <!-- Emma integration --> 
293     <path id="emma.lib">
294       <fileset dir="${test.lib.dir}" includes="emma*.jar"/>
295     </path>
296     <taskdef resource="emma_ant.properties" classpathref="emma.lib" />
297     <property name="emma.enabled" value="false"/>
298     
299     <!-- checkstyle -->
300     <!-- TMP download this dependence as well 
301     <property name="checkstyle.home" value="${lib.dir}/checkstyle-3.5"/>
302     <taskdef resource="checkstyletask.properties"
303              classpath="${checkstyle.home}/checkstyle-all-3.5.jar"/>
304     <property name="checkstyle.rules" value="coding-rules.xml"/>
305     <property name="checkstyle.test.rules" value="coding-rules-test.xml"/>
306     --> 
307              
308     <!-- jalopy -->
309     <!-- TMP download this dependence as well 
310     <property name="jalopy.home" value="${lib.dir}/jalopy-ant-0.6.2"/>
311     <property name="jalopy.rules" value="${build.dir}/formatting-rules.xml"/>
312     <taskdef name="jalopy"
313          classname="de.hunsicker.jalopy.plugin.ant.AntPlugin">
314       <classpath>
315         <fileset dir="${jalopy.home}">
316           <include name="*.jar" />
317         </fileset>
318       </classpath>
319     </taskdef>
320     -->
321   
322     <!-- simian integration -->
323     <!-- TMP download this dependence as well 
324     <property name="simian.home" value="${lib.dir}/simian"/>
325     <taskdef resource="simiantask.properties" classpath="${simian.home}/simian.jar"/>
326     --> 
327     
328     <!-- macker integration -->
329     <!-- TMP download this dependence as well 
330     <property name="macker.home" value="${lib.dir}/macker-0.4.2"/>
331     <path id="macker.path">
332           <fileset dir="${macker.home}">
333             <include name="**/*.jar"/>
334           </fileset>
335     </path>
336     <taskdef name="macker"
337       classname="net.innig.macker.ant.MackerAntTask"
338       classpathref="macker.path"/>
339
340     --> 
341    
342     <!-- ========================================================================================
343          Information
344          ======================================================================================== -->
345     <echo level="debug" message="project.home=${project.home}"/>
346     <echo level="debug" message="project.libs=${project.libs}"/>
347     <echo level="debug" message="classpath=${classpath}"/>
348
349
350     <!-- ========================================================================================
351          Included marker
352          ======================================================================================== -->
353     <property name="build_header_included" value="true" />
354 </target>
355       
356 <!--  =================================================================
357      Sets up the directory definitions for the module
358      ================================================================= -->
359 <target name="init_directory_properties" depends="import_header">
360         <!-- Set module properties for this build -->
361
362         <property name="module.home" value="." />
363         
364         <!--  Replace the dash by a / to create a relative directory 
365               from a module name --> 
366         <propertyregex property="module.reldir" 
367                        input="${module.name}"
368                        regexp="-"
369                        replace="/"
370                        global="true"
371                        defaultValue="${module.name}"/>
372         <property name="module.build.dir"
373                 value="${build.dir}/${module.reldir}" />
374
375         <property name="module.api.forrest.dir" value="${forrest.build.site.dir}/api/${module.name}" />
376         <!-- property name="module.classes.dir"     value="${module.build.dir}/bin"/ -->
377         <!-- property name="module.testclasses.dir" value="${module.build.dir}/testbin"/ -->
378         <property name="module.classes.dir" value="bin" />
379         <property name="module.testclasses.dir" value="testbin" />
380         <!-- Directory where generated SQL will be put by the schema export-->
381         <property name="module.sql.dir" value="${module.build.dir}/sql" />
382
383
384         <property name="module.jcovclasses.dir"
385                 value="${module.build.dir}/testjcov" />
386         <property name="module.jars.dir" value="${module.build.dir}/jars" />
387         <property name="module.jar.file"
388                 value="${module.jars.dir}/${module.jar.name}" />
389         <property name="module.source.dir" value="${module.home}/src" />
390         <property name="module.forrest.src.dir" value="${module.home}/xdocs" />
391         <property name="module.ejbsource.dir" value="${module.home}/ejbsrc" />
392         <property name="module.test.dir" value="${module.home}/test" />
393         <property name="module.testjar.name"
394                 value="${module.name}-test.jar" />
395         <property name="module.testresourcesjar.name"
396                 value="${module.name}-test-resources.jar" />
397         <property name="module.resource.dir"
398                 value="${module.home}/resources" />
399         <property name="module.testresource.dir"
400                 value="${module.resource.dir}/test" />
401     <property name="module.testoutput.dir"
402         value="${module.resource.dir}/testoutput"/>
403         <property name="module.report.dir"
404                 value="${module.build.dir}/testresults" />
405         <property name="module.emmareport.dir"
406                 value="${module.report.dir}/html/emma"/>
407         <property name="module.docbase.dir"
408                 value="${module.build.dir}/javadoc" />
409         <property name="module.javadoc.dir"
410                 value="${module.docbase.dir}/api" />
411         <property name="module.javadocjar.name"
412                 value="${module.name}-doc.jar" />
413         <property name="module.testjavadocjar.name"
414                 value="${module.name}-test-doc.jar" />
415         <property name="module.testjavadoc.dir"
416                 value="${module.docbase.dir}/testapi" />
417         <property name="module.pdfdoc.dir"
418                 value="${module.docbase.dir}/pdf" />
419         <property name="module.doccheck.dir"
420                 value="${module.docbase.dir}/doccheck" />
421         <property name="module.jar.name" value="${module.name}.jar" />
422         
423         <!--  Replace the dash by a / to create a relative directory 
424               from a module name --> 
425         <property name="module.dist.dir" value="${lib.dir}/${module.reldir}" />
426 </target>
427
428 <!-- ============================================================================
429   Initialize the environment for other tasks. Normally, every task which
430   does not depend on any other task should at least depend on init. 
431   ============================================================================ -->
432   
433   <target name="help" depends="import_header">
434     <antcall target="help-within-module"/>
435     <antcall target="help-outside-module"/>
436   </target>
437   
438   <target name="help-within-module" depends="init_directory_properties" if="module.name">
439     <antcall target="help-impl"/>
440   </target>
441   
442   <target name="help-outside-module" unless="module.name">
443     <antcall target="help-outside-module-2">
444       <param name="module.name" value="MODULE_NAME"/>
445     </antcall>
446   </target>
447   
448   <target name="help-outside-module-2" depends="init_directory_properties">
449     <antcall target="help-impl"/>
450   </target>
451   
452   
453   <target name="help-impl">
454     <echo>
455       General build targets: 
456       
457       clean:         Cleans up all build results (excluding the dist location).
458       compile:       Compiles all java clasess. Target dir ${module.classes.dir} 
459       jar:           Creates a jar file. Target: ${module.jar.file} 
460       dist:          Makes the build results available for other modules Target: ${module.dist.dir}. 
461       dist-lite:     Similar to dist but only creates the jars for code and test code. Useful
462                      during development because it takes much less time than the dist
463                      target
464       clean-dist:    Cleans up the dist directories. 
465       
466       Test: 
467       
468       test:          Compile and run tests. 
469       junit-reports: As test but generates a test report. Target: ${module.report.dir}(/html/unit) 
470       reports:       As junit-reports but also generates an emma test coverage
471                      report
472                      
473       Note: By specifying -Dtest=TestCaseName on the ant command line, 
474       only the specified testcase will be run. 
475       
476       Emma can also be executed manually:
477              
478          emma:          Overwrites the production classes by their instrumented versions.
479          emma-reports:  Generates emma code coverage reports after running the
480                         testcases with instrumented classes.
481       
482       Javadoc targets: 
483       
484       javadoc:       Generates javadoc. Target: ${module.javadoc.dir} 
485       doccheck:      Checks documentation. Target: ${module.doccheck.dir}
486       
487       Code analysis: 
488       
489       checkstyle:    Checks the style of the code. 
490       format:        Formats to the code in accordance with the checkstyle rules.
491       simian:        Analyse similarities in the code.
492       
493       Database targets: 
494       
495       For all targets below the database is configured using 
496       hibernate.properties (hibernate.dialect property) and 
497       the JDBC connection properties in database.properties. 
498       
499       The schemaexport and schemaupdate targets require the 
500       setting of a property named hibernate.filelist. The value
501       of the property must be the fully qualified class name of
502       a concrete subclass of ConfigFileList which has a default 
503       public constructor and defines the Hibernate mapping files that
504       can be used. 
505       
506       schemaexport:  Generate SQL code to create the required database structures.
507       
508       startdb:       Startup a lightweight database. The database
509       type to start is obtained from the currently
510       configured database. 
511       
512       schemaupdate:  Populate the database with a schema by running
513       Hibernate schemaupdate against the currently
514       configured database.  
515     </echo>
516   </target>
517   
518