wrap up the consistency tool
[voldemort/jeffpc.git] / build.xml
blob7fa12b50ef1ce355b3c24b80cc05b4910bf06a3d
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, Chinmay Soman, Vinoth Chandar, Zhongjie Wu" />
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     <pathelement path="${resources.dir}" />
31     <fileset dir="${dist.dir}">
32       <include name="${name}-${curr.release}.jar" />
33     </fileset>
34     <fileset dir="${contrib.root.dir}">
35       <include name="**/*.jar" />
36     </fileset>
37     <path refid="test-classpath" />
38   </path>
40   <path id="test-classpath">
41     <pathelement path="${resources.dir}" />
42     <pathelement path="${env.VOLD_TEST_JARS}" />
43     <path refid="main-classpath" />
44     <pathelement path="${testclasses.dir}" />
45   </path>
47   <path id="contrib-test-classpath">
48     <path refid="main-classpath" />
49     <path refid="contrib-classpath" />
50     <fileset dir="${dist.dir}">
51       <include name="${name}-contrib-${curr.release}.jar" />
52     </fileset>
53     <pathelement path="${testclasses.dir}" />
54   </path>
56   <macrodef name="replace-dir">
57     <attribute name="dir" />
58     <sequential>
59       <delete dir="@{dir}" />
60       <mkdir dir="@{dir}" />
61     </sequential>
62   </macrodef>
64   <target name="all" depends="clean, jar, test, contrib-jar, srcjar" description="Build all artifacts." />
66   <target name="clean" description="Delete generated files.">
67     <delete dir="${dist.dir}" />
68     <replace-dir dir="${javadoc.dir}" />
69   </target>
71   <target name="build" description="Compile main source tree java files">
72     <replace-dir dir="${classes.dir}" />
73     <!-- copy non-java files to classes dir to load from classpath -->
74     <copy todir="${classes.dir}">
75       <fileset dir="${java.dir}">
76         <exclude name="**/*.java" />
77         <exclude name="**/*.html" />
78         <exclude name="**/log4j.properties" />
79       </fileset>
80     </copy>
81     <replace-dir dir="META-INF" />
82         <echo message="creating manifest"/>
83     <manifest file="META-INF/MANIFEST.MF">   
84       <attribute name="Voldemort-Implementation-Version" value="${curr.release}" />
85       <attribute name="Implementation-Title" value="Voldemort" />
86       <attribute name="Implementation-Version" value="${curr.release}" />
87       <attribute name="Implementation-Vendor" value="LinkedIn" />
88     </manifest>
89     <!-- place to put log4j.properties -->
90     <replace-dir dir="${resources.dir}"/>
91     <copy file="${java.dir}/log4j.properties" todir="${resources.dir}"/>
92     <javac destdir="${classes.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
93       <src path="${java.dir}" />
94       <classpath refid="main-classpath" />
95     </javac>
96   </target>
98   <target name="buildtest" description="Compile test classes">
99     <replace-dir dir="${testclasses.dir}" />
100     <copy todir="${testclasses.dir}">
101       <fileset dir="${commontestsrc.dir}">
102         <exclude name="**/*.java" />
103         <exclude name="**/*.html" />
104       </fileset>
105     </copy>
106     <copy todir="${testclasses.dir}">
107       <fileset dir="${unittestsrc.dir}">
108         <exclude name="**/*.java" />
109         <exclude name="**/*.html" />
110       </fileset>
111     </copy>
112     <javac destdir="${testclasses.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
113       <src path="${unittestsrc.dir}" />
114       <src path="${inttestsrc.dir}" />
115       <src path="${commontestsrc.dir}" />
116       <src path="${longtestsrc.dir}" />
117       <classpath refid="main-classpath" />
118     </javac>
119   </target>
121   <target name="test" depends="build, buildtest" description="Build test jar file">
122     <jar destfile="${dist.dir}/${name}-test-${curr.release}.jar">
123       <fileset dir="${testclasses.dir}" />
124     </jar>
125   </target>
127   <target name="protobuff" description="Generate source files from .proto files">
128     <pathconvert property="proto.sources" pathsep=" ">
129       <path id="proto-files">
130         <fileset dir="${protobuff.dir}" />
131       </path>
132     </pathconvert>
134     <property name="proto.path" location="${protobuff.dir}"/>
135     <property name="javaout.path" location="${java.dir}"/>
136     <property name="pythonout.path" location="${python.proto.dir}"/>
137     <exec executable="protoc" failonerror="true">
138       <arg value="--proto_path=${proto.path}"/>
139       <arg value="--java_out=${javaout.path}"/>
140       <arg value="--python_out=${pythonout.path}"/>
141       <arg line="${proto.sources}"/>
142     </exec>
143   </target>
145   <target name="jar" depends="build" description="Build server jar file">
146     <jar destfile="${dist.dir}/${name}-${curr.release}.jar"  manifest="META-INF/MANIFEST.MF">
147       <fileset dir="${classes.dir}">
148         <include name="**/*.*" />
149       </fileset>
150       <!-- include xsds -->
151       <fileset dir="${java.dir}">
152         <include name="**/*.xsd" />
153       </fileset>
154         
155         <fileset dir=".">
156                         <include name="META-INF/MANIFEST.MF" />
157       </fileset>
158     </jar>
159   </target>
161   <target name="srcjar" description="Build source jar file">
162     <mkdir dir="${dist.dir}" />
163     <jar destfile="${dist.dir}/${name}-${curr.release}-src.jar">
164       <fileset dir="${java.dir}">
165         <include name="**/*.java" />
166       </fileset>
167     </jar>
168   </target>
170   <target name="alljar" depends="build, contrib-build" description="Build a jar file that includes all contrib code.">
171     <jar destfile="${dist.dir}/${name}-${curr.release}-all.jar">
172       <fileset dir="${classes.dir}">
173         <include name="**/*.*" />
174       </fileset>
175       <fileset dir="${contrib.classes.dir}">
176         <include name="**/*.*" />
177       </fileset>
178       <!-- include xsds -->
179       <fileset dir="${java.dir}">
180         <include name="**/*.xsd" />
181       </fileset>
182     </jar>
183   </target>
185   <target name="war" depends="build" description="Build server war file">
186     <war destfile="${dist.dir}/${name}.war" webxml="web.xml" basedir="${classes.dir}">
187       <classes dir="${classes.dir}"/>
188       <lib dir="${lib.dir}">
189         <exclude name="${lib.dir}/servlet-api*.jar"/>
190         <exclude name="${lib.dir}/src/**"/>
191       </lib>
192     </war>
193   </target>
195   <target name="contrib-build" depends="build, buildtest" description="Compile contrib packages (java and test) ">
196     <replace-dir dir="${contrib.classes.dir}" />
197     <javac destdir="${contrib.classes.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
198       <src path="${contrib.root.dir}" />
199       <src path="${contrib.root.dir}" />
200       <classpath refid="main-classpath" />
201       <classpath refid="contrib-classpath" />
202     </javac>
203     <copy todir="${contrib.classes.dir}">
204       <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
205     </copy>
206   </target>
208   <target name="contrib-jar" depends="contrib-build" description="Build contrib jar file">
209     <jar destfile="${dist.dir}/${name}-contrib-${curr.release}.jar">
210       <fileset dir="${contrib.classes.dir}">
211         <include name="**/*.*" />
212       </fileset>
213     </jar>
214   </target>
216   <target name="contrib-srcjar" description="Build contrib source jar file">
217     <mkdir dir="${dist.dir}" />
218     <jar destfile="${dist.dir}/${name}-contrib-${curr.release}-src.jar">
219       <fileset dir="${contrib.root.dir}/**/java">
220         <include name="**/*.java" />
221       </fileset>
222     </jar>
223   </target>
225   <target name="contrib-junit" depends="contrib-jar" description="Run contrib junit tests except EC2 and Krati tests.">
226     <replace-dir dir="${contribtestreport.dir}" />
227     <replace-dir dir="${contribtesthtml.dir}" />
228     <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
229       <classpath refid="contrib-test-classpath" />
230       <formatter type="xml" />
231       <batchtest fork="yes" todir="${contribtestreport.dir}">
232         <fileset dir="${contrib.classes.dir}">
233           <include name="**/*Test.class" />
234           <exclude name="**/*PerformanceTest.class" />
235           <exclude name="**/*RemoteTest.class" />
236           <exclude name="**/Ec2*Test.class" />
237           <exclude name="**/Krati*Test.class" />
238         </fileset>
239       </batchtest>
240     </junit>
241     <junitreport todir="${contribtesthtml.dir}">
242       <fileset dir="${contribtestreport.dir}">
243         <include name="TEST-*.xml" />
244       </fileset>
245       <report todir="${contribtesthtml.dir}" format="frames" />
246     </junitreport>
247   </target>
249   <target name="ec2testing-junit" depends="all" description="Run EC2 testing contrib junit tests.">
250     <copy todir="${testclasses.dir}">
251       <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
252     </copy>
253     <replace-dir dir="${contribtestreport.dir}" />
254     <replace-dir dir="${contribtesthtml.dir}" />
255     <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
256       <syspropertyset>
257         <propertyref prefix="ec2" />
258       </syspropertyset>
259       <classpath refid="contrib-test-classpath" />
260       <formatter type="xml" />
261       <batchtest fork="yes" todir="${contribtestreport.dir}">
262         <fileset dir="${contrib.classes.dir}">
263           <include name="**/Ec2SmokeTest.class" />
264         </fileset>
265       </batchtest>
266     </junit>
267     <junitreport todir="${contribtesthtml.dir}">
268       <fileset dir="${contribtestreport.dir}">
269         <include name="TEST-*.xml" />
270       </fileset>
271       <report todir="${contribtesthtml.dir}" format="frames" />
272     </junitreport>
273   </target>
275   <target name="ec2testing-gossip" depends="contrib-jar" description="Run gossip tests on EC2.">
276     <copy todir="${testclasses.dir}">
277       <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
278     </copy>
279     <replace-dir dir="${contribtestreport.dir}" />
280     <replace-dir dir="${contribtesthtml.dir}" />
281     <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
282       <syspropertyset>
283         <propertyref prefix="ec2" />
284         <propertyref  prefix="log4j" />
285         <propertyref  prefix="gossip" />
286       </syspropertyset>
287       <classpath refid="contrib-test-classpath" />
288       <formatter type="xml" />
289       <batchtest fork="yes" todir="${contribtestreport.dir}">
290         <fileset dir="${contrib.classes.dir}">
291           <include name="**/Ec2GossipTest.class" />
292         </fileset>
293       </batchtest>
294     </junit>
295     <junitreport todir="${contribtesthtml.dir}">
296       <fileset dir="${contribtestreport.dir}">
297         <include name="TEST-*.xml" />
298       </fileset>
299       <report todir="${contribtesthtml.dir}" format="frames" />
300     </junitreport>
301   </target>
303   <target name="ec2testing-rebalancing" depends="contrib-jar" description="Run rebalancing tests on EC2.">
304     <copy todir="${testclasses.dir}">
305       <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
306     </copy>
307     <replace-dir dir="${contribtestreport.dir}" />
308     <replace-dir dir="${contribtesthtml.dir}" />
309     <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
310       <syspropertyset>
311         <propertyref prefix="ec2" />
312         <propertyref  prefix="log4j" />
313         <propertyref  prefix="rebalancing" />
314       </syspropertyset>
315       <classpath refid="contrib-test-classpath" />
316       <formatter type="xml" />
317       <batchtest fork="yes" todir="${contribtestreport.dir}">
318         <fileset dir="${contrib.classes.dir}">
319           <include name="**/Ec2RebalancingTest.class" />
320         </fileset>
321       </batchtest>
322     </junit>
323     <junitreport todir="${contribtesthtml.dir}">
324       <fileset dir="${contribtestreport.dir}">
325         <include name="TEST-*.xml" />
326       </fileset>
327       <report todir="${contribtesthtml.dir}" format="frames" />
328     </junitreport>
329   </target>
331   <macrodef name="create-release-artifacts">
332     <attribute name="version" />
333     <sequential>
334     <antcall target="all"/>
335     <zip destfile="${dist.dir}/${name}-@{version}.zip">
336       <zipfileset dir="." prefix="voldemort-@{version}" filemode="755" includes="bin/*"/>
337       <zipfileset dir="." prefix="voldemort-@{version}" includes="**">
338         <exclude name="${dist.dir}/*classes"/>
339         <exclude name="bin/*"/>
340         <exclude name=".git*/**"/>
341       </zipfileset>
342     </zip>
343     <tar destfile="${dist.dir}/${name}-@{version}.tar.gz" compression="gzip" longfile="gnu">
344       <tarfileset dir="." prefix="voldemort-@{version}" filemode="755" includes="bin/*"/>
345       <tarfileset dir="." prefix="voldemort-@{version}" includes="**">
346         <exclude name="${dist.dir}/*classes"/>
347         <exclude name="${dist.dir}/*.zip"/>
348         <exclude name="bin/*"/>
349         <exclude name=".git*/**"/>
350       </tarfileset>
351     </tar>
352     </sequential>
353   </macrodef>
355   <target name="snapshot"  description="Create a release-snapshot zip file with everything pre-built.">
356     <create-release-artifacts version="${curr.release.snapshot}" />
357   </target>
359   <target name="release" description="Create a release zip file with everything pre-built.">
360     <create-release-artifacts version="${curr.release}" />
361   </target>
363   <target name="hadoop-benchmark-jar" depends="build, contrib-build"
364     description="Build a jar file that includes all contrib code plus the necessary jars for running the hadoop benchmark.">
365     <jar destfile="${dist.dir}/hadoop-benchmark.jar">
366       <fileset dir="${classes.dir}">
367         <include name="**/*.*" />
368       </fileset>
369       <fileset dir="${contrib.classes.dir}">
370         <include name="**/*.*" />
371       </fileset>
372       <!-- include xsds -->
373       <fileset dir="${java.dir}">
374         <include name="**/*.xsd" />
375       </fileset>
376       <fileset dir="">
377         <include name="lib/jdom*.jar"/>
378         <include name="lib/google-collect*.jar"/>
379         <include name="lib/commons-lang*.jar"/>
380       </fileset>
381     </jar>
382   </target>
384   <target name="junit" depends="build, buildtest" description="Run junit tests.">
385     <replace-dir dir="${testreport.dir}" />
386     <replace-dir dir="${testhtml.dir}" />
387     <junit printsummary="yes" showoutput="true" maxmemory="2048m" timeout="1200000">
388       <classpath refid="test-classpath" />
389       <formatter type="xml" />
390       <batchtest fork="yes" todir="${testreport.dir}">
391         <fileset dir="${unittestsrc.dir}">
392           <include name="**/*Test.java" />
393           <exclude name="**/Abstract*.java" />
394         </fileset>
395       </batchtest>
396     </junit>
397     <junitreport todir="${testhtml.dir}">
398       <fileset dir="${testreport.dir}">
399         <include name="TEST-*.xml" />
400       </fileset>
401       <report todir="${testhtml.dir}" format="frames" />
402     </junitreport>
403   </target>
405   <target name="junit-long" depends="build, buildtest, junit" description="Run long junit tests that uses larger data sets than normal junit tests.">
406     <replace-dir dir="${longtestreport.dir}" />
407     <replace-dir dir="${longtesthtml.dir}" />
408     <junit printsummary="yes" showoutput="true" maxmemory="2048m" fork="yes" timeout="5400000">
409       <classpath refid="test-classpath" />
410       <formatter type="xml" />
411       <batchtest todir="${longtestreport.dir}">
412         <fileset dir="${longtestsrc.dir}">
413           <include name="**/*Test.java" />
414         </fileset>
415       </batchtest>
416     </junit>
417     <junitreport todir="${longtesthtml.dir}">
418       <fileset dir="${longtestreport.dir}">
419         <include name="TEST-*.xml" />
420       </fileset>
421       <report todir="${longtesthtml.dir}" format="frames" />
422     </junitreport>
423   </target>
425   <target name="junit-test" depends="build, buildtest, contrib-jar" description="Run single junit test for class ClassName with -Dtest.name=[ClassName]  (Note: Use the class name, not the file name with the .java extension)">
426     <replace-dir dir="${singletestreport.dir}" />
427     <replace-dir dir="${singletesthtml.dir}" />
428     <junit printsummary="on" showoutput="true" maxmemory="4096m">
429       <classpath refid="contrib-test-classpath" />
430       <classpath path="${log4j.properties.dir}" />
431       <formatter type="plain" />
432       <formatter type="xml" />
433       <test name="${test.name}"  todir="${singletestreport.dir}"/>
434     </junit>
435     <junitreport todir="${singletesthtml.dir}">
436       <fileset dir="${singletestreport.dir}">
437         <include name="TEST-*.xml" />
438       </fileset>
439       <report todir="${singletesthtml.dir}" format="frames" />
440     </junitreport>
441   </target>
443   <target name="junit-all" depends="junit-long, contrib-junit" description="Run All junit tests including contrib.">
444   </target>
446   <macrodef name="make-javadocs">
447     <attribute name="dir" />
448     <attribute name="packagenames" />
449     <attribute name="javadir" />
450     <sequential>
451       <replace-dir dir="@{dir}" />
452       <javadoc sourcepath="@{javadir}" destdir="@{dir}" windowtitle="${display.name}" source="1.5" author="true" version="true" use="true" packagenames="@{packagenames}">
453         <doctitle>${display.name}</doctitle>
454         <bottom>${author}</bottom>
455         <classpath refid="main-classpath" />
456       </javadoc>
457     </sequential>
458   </macrodef>
460   <target name="docs" description="Create complete Javadoc documentation">
461     <make-javadocs dir="${javadoc.dir}/all" packagenames="*" javadir="${java.dir}"/>
462     <make-javadocs dir="${javadoc.dir}/client" packagenames="voldemort.versioning.*, voldemort.client.*,voldemort.serialization.*" javadir="${java.dir}"/>
463   </target>
465   <target name="redeploy" depends="war, deploy">
466   </target>
468   <taskdef file="tomcat-tasks.properties">
469     <classpath>
470       <path location="${lib.dir}/catalina-ant.jar" />
471     </classpath>
472   </taskdef>
474   <target name="list" description="List Tomcat applications">
475     <list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
476   </target>
478   <target name="deploy" description="Deploy application" depends="war">
479     <deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="${tomcat.context}" update="true" war="file:${dist.dir}/${name}.war" />
480   </target>
482   <target name="undeploy" description="Undeploy application">
483     <undeploy url="${tomcat.manager.url}"
484                  username="${tomcat.manager.username}"
485                  password="${tomcat.manager.password}"
486                  path="${tomcat.context}"/>
487   </target>
489 </project>