changed checkout record code to make sure timeouts are recorded
[voldemort/jeffpc.git] / build.xml
blob149472494d99a883528aadf7fa480ea56f02d462
1 <?xml version="1.0"?>
3 <project name="voldemort" basedir="." default="all">
4   <property file="build.properties" />
6   <property name="name" value="voldemort" />
7   <property name="display.name" value="Voldemort" />
8   <property name="author" value="Jay Kreps, Roshan Sumbaly, Alex Feinberg, Bhupesh Bansal, Lei Gao" />
9   <property environment="env" />
11   <path id="main-classpath">
12     <fileset dir="${lib.dir}">
13       <include name="*.jar" />
14     </fileset>
15     <pathelement path="${classes.dir}" />
16   </path>
18   <!-- set the build number based on environment variable, otherwise blank -->
19   <property environment="env" description="System environment variables (including those set by Hudson)"/>
20   <condition property="curr.release.snapshot" value="${curr.release}-snapshot-${env.BUILD_NUMBER}" else="${curr.release}">
21        <and>
22           <isset property="env.BUILD_NUMBER" />
23           <not>
24               <equals arg1="" arg2="${env.BUILD_NUMBER}" trim="yes"/>
25           </not>
26        </and>
27   </condition>
29   <path id="contrib-classpath">
30     <fileset dir="${dist.dir}">
31       <include name="${name}-${curr.release}.jar" />
32     </fileset>
33     <fileset dir="${contrib.root.dir}">
34       <include name="**/*.jar" />
35     </fileset>
36     <path refid="test-classpath" />
37   </path>
39   <path id="test-classpath">
40     <pathelement path="${env.VOLD_TEST_JARS}" />
41     <path refid="main-classpath" />
42     <pathelement path="${testclasses.dir}" />
43   </path>
45   <path id="contrib-test-classpath">
46     <path refid="main-classpath" />
47     <path refid="contrib-classpath" />
48     <fileset dir="${dist.dir}">
49       <include name="${name}-contrib-${curr.release}.jar" />
50     </fileset>
51     <pathelement path="${testclasses.dir}" />
52   </path>
54   <macrodef name="replace-dir">
55     <attribute name="dir" />
56     <sequential>
57       <delete dir="@{dir}" />
58       <mkdir dir="@{dir}" />
59     </sequential>
60   </macrodef>
62   <target name="all" depends="clean, jar, test, contrib-jar, srcjar" description="Build all artifacts." />
64   <target name="clean" description="Delete generated files.">
65     <delete dir="${dist.dir}" />
66     <replace-dir dir="${javadoc.dir}" />
67   </target>
69   <target name="build" description="Compile main source tree java files">
70     <replace-dir dir="${classes.dir}" />
71     <!-- copy non-java files to classes dir to load from classpath -->
72     <copy todir="${classes.dir}">
73       <fileset dir="${java.dir}">
74         <exclude name="**/*.java" />
75         <exclude name="**/*.html" />
76         <exclude name="**/log4j.properties" />
77       </fileset>
78     </copy>
79     <!-- place to put log4j.properties -->
80     <replace-dir dir="${resources.dir}"/>
81     <copy file="${java.dir}/log4j.properties" todir="${resources.dir}"/>
82     <javac destdir="${classes.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
83       <src path="${java.dir}" />
84       <classpath refid="main-classpath" />
85     </javac>
86   </target>
88   <target name="buildtest" description="Compile test classes">
89     <replace-dir dir="${testclasses.dir}" />
90     <copy todir="${testclasses.dir}">
91       <fileset dir="${commontestsrc.dir}">
92         <exclude name="**/*.java" />
93         <exclude name="**/*.html" />
94       </fileset>
95     </copy>
96     <copy todir="${testclasses.dir}">
97       <fileset dir="${unittestsrc.dir}">
98         <exclude name="**/*.java" />
99         <exclude name="**/*.html" />
100       </fileset>
101     </copy>
102     <javac destdir="${testclasses.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
103       <src path="${unittestsrc.dir}" />
104       <src path="${inttestsrc.dir}" />
105       <src path="${commontestsrc.dir}" />
106       <src path="${longtestsrc.dir}" />
107       <classpath refid="main-classpath" />
108     </javac>
109   </target>
111   <target name="test" depends="build, buildtest" description="Build test jar file">
112     <jar destfile="${dist.dir}/${name}-test-${curr.release}.jar">
113       <fileset dir="${testclasses.dir}" />
114     </jar>
115   </target>
117   <target name="protobuff" description="Generate source files from .proto files">
118     <pathconvert property="proto.sources" pathsep=" ">
119       <path id="proto-files">
120         <fileset dir="${protobuff.dir}" />
121       </path>
122     </pathconvert>
124     <property name="proto.path" location="${protobuff.dir}"/>
125     <property name="javaout.path" location="${java.dir}"/>
126     <property name="pythonout.path" location="${python.proto.dir}"/>
127     <exec executable="protoc" failonerror="true">
128       <arg value="--proto_path=${proto.path}"/>
129       <arg value="--java_out=${javaout.path}"/>
130       <arg value="--python_out=${pythonout.path}"/>
131       <arg line="${proto.sources}"/>
132     </exec>
133   </target>
135   <target name="jar" depends="build" description="Build server jar file">
136     <jar destfile="${dist.dir}/${name}-${curr.release}.jar">
137       <fileset dir="${classes.dir}">
138         <include name="**/*.*" />
139       </fileset>
140       <!-- include xsds -->
141       <fileset dir="${java.dir}">
142         <include name="**/*.xsd" />
143       </fileset>
144     </jar>
145   </target>
147   <target name="srcjar" description="Build source jar file">
148     <mkdir dir="${dist.dir}" />
149     <jar destfile="${dist.dir}/${name}-${curr.release}-src.jar">
150       <fileset dir="${java.dir}">
151         <include name="**/*.java" />
152       </fileset>
153     </jar>
154   </target>
156   <target name="alljar" depends="build, contrib-build" description="Build a jar file that includes all contrib code.">
157     <jar destfile="${dist.dir}/${name}-${curr.release}-all.jar">
158       <fileset dir="${classes.dir}">
159         <include name="**/*.*" />
160       </fileset>
161       <fileset dir="${contrib.classes.dir}">
162         <include name="**/*.*" />
163       </fileset>
164       <!-- include xsds -->
165       <fileset dir="${java.dir}">
166         <include name="**/*.xsd" />
167       </fileset>
168     </jar>
169   </target>
171   <target name="war" depends="build" description="Build server war file">
172     <war destfile="${dist.dir}/${name}.war" webxml="web.xml" basedir="${classes.dir}">
173       <classes dir="${classes.dir}"/>
174       <lib dir="${lib.dir}">
175         <exclude name="${lib.dir}/servlet-api*.jar"/>
176         <exclude name="${lib.dir}/src/**"/>
177       </lib>
178     </war>
179   </target>
181   <target name="contrib-build" depends="build, buildtest" description="Compile contrib packages (java and test) ">
182     <replace-dir dir="${contrib.classes.dir}" />
183     <javac destdir="${contrib.classes.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
184       <src path="${contrib.root.dir}" />
185       <src path="${contrib.root.dir}" />
186       <classpath refid="main-classpath" />
187       <classpath refid="contrib-classpath" />
188     </javac>
189     <copy todir="${contrib.classes.dir}">
190       <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
191     </copy>
192   </target>
194   <target name="contrib-jar" depends="contrib-build" description="Build contrib jar file">
195     <jar destfile="${dist.dir}/${name}-contrib-${curr.release}.jar">
196       <fileset dir="${contrib.classes.dir}">
197         <include name="**/*.*" />
198       </fileset>
199     </jar>
200   </target>
202   <target name="contrib-srcjar" description="Build contrib source jar file">
203     <mkdir dir="${dist.dir}" />
204     <jar destfile="${dist.dir}/${name}-contrib-${curr.release}-src.jar">
205       <fileset dir="${contrib.root.dir}/**/java">
206         <include name="**/*.java" />
207       </fileset>
208     </jar>
209   </target>
211   <target name="contrib-junit" depends="contrib-jar" description="Run contrib junit tests except EC2 and Krati tests.">
212     <replace-dir dir="${contribtestreport.dir}" />
213     <replace-dir dir="${contribtesthtml.dir}" />
214     <junit printsummary="yes" maxmemory="1024m" showoutput="true" failureProperty="test.failure">
215       <classpath refid="contrib-test-classpath" />
216       <formatter type="xml" />
217       <batchtest fork="yes" todir="${contribtestreport.dir}">
218         <fileset dir="${contrib.classes.dir}">
219           <include name="**/*Test.class" />
220           <exclude name="**/*PerformanceTest.class" />
221           <exclude name="**/*RemoteTest.class" />
222           <exclude name="**/Ec2*Test.class" />
223           <exclude name="**/Krati*Test.class" />
224         </fileset>
225       </batchtest>
226     </junit>
227     <junitreport todir="${contribtesthtml.dir}">
228       <fileset dir="${contribtestreport.dir}">
229         <include name="TEST-*.xml" />
230       </fileset>
231       <report todir="${contribtesthtml.dir}" format="frames" />
232     </junitreport>
233   </target>
235   <target name="ec2testing-junit" depends="all" description="Run EC2 testing contrib junit tests.">
236     <copy todir="${testclasses.dir}">
237       <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
238     </copy>
239     <replace-dir dir="${contribtestreport.dir}" />
240     <replace-dir dir="${contribtesthtml.dir}" />
241     <junit printsummary="yes" maxmemory="1024m" showoutput="true" failureProperty="test.failure">
242       <syspropertyset>
243         <propertyref prefix="ec2" />
244       </syspropertyset>
245       <classpath refid="contrib-test-classpath" />
246       <formatter type="xml" />
247       <batchtest fork="yes" todir="${contribtestreport.dir}">
248         <fileset dir="${contrib.classes.dir}">
249           <include name="**/Ec2SmokeTest.class" />
250         </fileset>
251       </batchtest>
252     </junit>
253     <junitreport todir="${contribtesthtml.dir}">
254       <fileset dir="${contribtestreport.dir}">
255         <include name="TEST-*.xml" />
256       </fileset>
257       <report todir="${contribtesthtml.dir}" format="frames" />
258     </junitreport>
259   </target>
261   <target name="ec2testing-gossip" depends="contrib-jar" description="Run gossip tests on EC2.">
262     <copy todir="${testclasses.dir}">
263       <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
264     </copy>
265     <replace-dir dir="${contribtestreport.dir}" />
266     <replace-dir dir="${contribtesthtml.dir}" />
267     <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
268       <syspropertyset>
269         <propertyref prefix="ec2" />
270         <propertyref  prefix="log4j" />
271         <propertyref  prefix="gossip" />
272       </syspropertyset>
273       <classpath refid="contrib-test-classpath" />
274       <formatter type="xml" />
275       <batchtest fork="yes" todir="${contribtestreport.dir}">
276         <fileset dir="${contrib.classes.dir}">
277           <include name="**/Ec2GossipTest.class" />
278         </fileset>
279       </batchtest>
280     </junit>
281     <junitreport todir="${contribtesthtml.dir}">
282       <fileset dir="${contribtestreport.dir}">
283         <include name="TEST-*.xml" />
284       </fileset>
285       <report todir="${contribtesthtml.dir}" format="frames" />
286     </junitreport>
287   </target>
289   <target name="ec2testing-rebalancing" depends="contrib-jar" description="Run rebalancing tests on EC2.">
290     <copy todir="${testclasses.dir}">
291       <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
292     </copy>
293     <replace-dir dir="${contribtestreport.dir}" />
294     <replace-dir dir="${contribtesthtml.dir}" />
295     <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
296       <syspropertyset>
297         <propertyref prefix="ec2" />
298         <propertyref  prefix="log4j" />
299         <propertyref  prefix="rebalancing" />
300       </syspropertyset>
301       <classpath refid="contrib-test-classpath" />
302       <formatter type="xml" />
303       <batchtest fork="yes" todir="${contribtestreport.dir}">
304         <fileset dir="${contrib.classes.dir}">
305           <include name="**/Ec2RebalancingTest.class" />
306         </fileset>
307       </batchtest>
308     </junit>
309     <junitreport todir="${contribtesthtml.dir}">
310       <fileset dir="${contribtestreport.dir}">
311         <include name="TEST-*.xml" />
312       </fileset>
313       <report todir="${contribtesthtml.dir}" format="frames" />
314     </junitreport>
315   </target>
317   <macrodef name="create-release-artifacts">
318     <attribute name="version" />
319     <sequential>
320     <antcall target="all"/>
321     <zip destfile="${dist.dir}/${name}-@{version}.zip">
322       <zipfileset dir="." prefix="voldemort-@{version}" filemode="755" includes="bin/*"/>
323       <zipfileset dir="." prefix="voldemort-@{version}" includes="**">
324         <exclude name="${dist.dir}/*classes"/>
325         <exclude name="bin/*"/>
326         <exclude name=".git*/**"/>
327       </zipfileset>
328     </zip>
329     <tar destfile="${dist.dir}/${name}-@{version}.tar.gz" compression="gzip" longfile="gnu">
330       <tarfileset dir="." prefix="voldemort-@{version}" filemode="755" includes="bin/*"/>
331       <tarfileset dir="." prefix="voldemort-@{version}" includes="**">
332         <exclude name="${dist.dir}/*classes"/>
333         <exclude name="${dist.dir}/*.zip"/>
334         <exclude name="bin/*"/>
335         <exclude name=".git*/**"/>
336       </tarfileset>
337     </tar>
338     </sequential>
339   </macrodef>
341   <target name="snapshot"  description="Create a release-snapshot zip file with everything pre-built.">
342     <create-release-artifacts version="${curr.release.snapshot}" />
343   </target>
345   <target name="release" description="Create a release zip file with everything pre-built.">
346     <create-release-artifacts version="${curr.release}" />
347   </target>
349   <target name="hadoop-benchmark-jar" depends="build, contrib-build"
350     description="Build a jar file that includes all contrib code plus the necessary jars for running the hadoop benchmark.">
351     <jar destfile="${dist.dir}/hadoop-benchmark.jar">
352       <fileset dir="${classes.dir}">
353         <include name="**/*.*" />
354       </fileset>
355       <fileset dir="${contrib.classes.dir}">
356         <include name="**/*.*" />
357       </fileset>
358       <!-- include xsds -->
359       <fileset dir="${java.dir}">
360         <include name="**/*.xsd" />
361       </fileset>
362       <fileset dir="">
363         <include name="lib/jdom*.jar"/>
364         <include name="lib/google-collect*.jar"/>
365         <include name="lib/commons-lang*.jar"/>
366       </fileset>
367     </jar>
368   </target>
370   <target name="junit" depends="build, buildtest" description="Run junit tests.">
371     <replace-dir dir="${testreport.dir}" />
372     <replace-dir dir="${testhtml.dir}" />
373     <junit printsummary="yes" showoutput="true" maxmemory="1024m">
374       <classpath refid="test-classpath" />
375       <formatter type="xml" />
376       <batchtest fork="yes" todir="${testreport.dir}">
377         <fileset dir="${unittestsrc.dir}">
378           <include name="**/*Test.java" />
379           <exclude name="**/Abstract*.java" />
380         </fileset>
381       </batchtest>
382     </junit>
383     <junitreport todir="${testhtml.dir}">
384       <fileset dir="${testreport.dir}">
385         <include name="TEST-*.xml" />
386       </fileset>
387       <report todir="${testhtml.dir}" format="frames" />
388     </junitreport>
389   </target>
391   <target name="junit-long" depends="build, buildtest, junit" description="Run long junit tests that uses larger data sets than normal junit tests.">
392     <replace-dir dir="${longtestreport.dir}" />
393     <replace-dir dir="${longtesthtml.dir}" />
394     <junit printsummary="yes" showoutput="true" maxmemory="1024m">
395       <classpath refid="test-classpath" />
396       <formatter type="xml" />
397       <batchtest fork="yes" todir="${longtestreport.dir}">
398         <fileset dir="${longtestsrc.dir}">
399           <include name="**/*Test.java" />
400         </fileset>
401       </batchtest>
402     </junit>
403     <junitreport todir="${longtesthtml.dir}">
404       <fileset dir="${longtestreport.dir}">
405         <include name="TEST-*.xml" />
406       </fileset>
407       <report todir="${longtesthtml.dir}" format="frames" />
408     </junitreport>
409   </target>
411   <target name="junit-test" depends="build, buildtest, contrib-jar" description="Run single junit test with -Dtest.name=">
412     <junit printsummary="yes" showoutput="true" maxmemory="1024m">
413       <classpath refid="contrib-test-classpath" />
414       <test name="${test.name}" />
415     </junit>
416   </target>
418   <target name="junit-all" depends="junit-long, contrib-junit" description="Run All junit tests including contrib.">
419   </target>
421   <macrodef name="make-javadocs">
422     <attribute name="dir" />
423     <attribute name="packagenames" />
424     <attribute name="javadir" />
425     <sequential>
426       <replace-dir dir="@{dir}" />
427       <javadoc sourcepath="@{javadir}" destdir="@{dir}" windowtitle="${display.name}" source="1.5" author="true" version="true" use="true" packagenames="@{packagenames}">
428         <doctitle>${display.name}</doctitle>
429         <bottom>${author}</bottom>
430         <classpath refid="main-classpath" />
431       </javadoc>
432     </sequential>
433   </macrodef>
435   <target name="docs" description="Create complete Javadoc documentation">
436     <make-javadocs dir="${javadoc.dir}/all" packagenames="*" javadir="${java.dir}"/>
437     <make-javadocs dir="${javadoc.dir}/client" packagenames="voldemort.versioning.*, voldemort.client.*,voldemort.serialization.*" javadir="${java.dir}"/>
438   </target>
440   <target name="redeploy" depends="war, deploy">
441   </target>
443   <taskdef file="tomcat-tasks.properties">
444     <classpath>
445       <path location="${lib.dir}/catalina-ant.jar" />
446     </classpath>
447   </taskdef>
449   <target name="list" description="List Tomcat applications">
450     <list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
451   </target>
453   <target name="deploy" description="Deploy application" depends="war">
454     <deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="${tomcat.context}" update="true" war="file:${dist.dir}/${name}.war" />
455   </target>
457   <target name="undeploy" description="Undeploy application">
458     <undeploy url="${tomcat.manager.url}"
459                  username="${tomcat.manager.username}"
460                  password="${tomcat.manager.password}"
461                  path="${tomcat.context}"/>
462   </target>
464 </project>