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" />
15 <pathelement path="${classes.dir}" />
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}">
22 <isset property="env.BUILD_NUMBER" />
24 <equals arg1="" arg2="${env.BUILD_NUMBER}" trim="yes"/>
29 <path id="contrib-classpath">
30 <pathelement path="${resources.dir}" />
31 <fileset dir="${dist.dir}">
32 <include name="${name}-${curr.release}.jar" />
34 <fileset dir="${contrib.root.dir}">
35 <include name="**/*.jar" />
37 <path refid="test-classpath" />
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}" />
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" />
53 <pathelement path="${testclasses.dir}" />
56 <macrodef name="replace-dir">
57 <attribute name="dir" />
59 <delete dir="@{dir}" />
60 <mkdir dir="@{dir}" />
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}" />
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" />
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" />
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="${javac.version}" source="${javac.version}" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
93 <src path="${java.dir}" />
94 <classpath refid="main-classpath" />
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" />
106 <copy todir="${testclasses.dir}">
107 <fileset dir="${unittestsrc.dir}">
108 <exclude name="**/*.java" />
109 <exclude name="**/*.html" />
112 <javac destdir="${testclasses.dir}" target="${javac.version}" source="${javac.version}" 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" />
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}" />
128 Use protoc version 2.3.0 to recompile by hand:
129 https://code.google.com/p/protobuf/downloads/detail?name=protobuf-2.3.0.tar.gz&can=2&q=
131 Below, '<DASH/>' means '-'. This was done to nest double-dashes within xml comment.
133 <target name="protobuff" description="Generate source files from .proto files">
134 <pathconvert property="proto.sources" pathsep=" ">
135 <path id="proto-files">
136 <fileset dir="${protobuff.dir}" />
140 <property name="proto.path" location="${protobuff.dir}"/>
141 <property name="javaout.path" location="${java.dir}"/>
142 <property name="pythonout.path" location="${python.proto.dir}"/>
143 <exec executable="protoc" failonerror="true">
144 <arg value="<DASH/><DASH/>proto_path=${proto.path}"/>
145 <arg value=""<DASH/><DASH/>java_out=${javaout.path}"/>
146 <arg value=""<DASH/><DASH/>python_out=${pythonout.path}"/>
147 <arg line="${proto.sources}"/>
152 <target name="jar" depends="build" description="Build server jar file">
153 <jar destfile="${dist.dir}/${name}-${curr.release}.jar" manifest="META-INF/MANIFEST.MF">
154 <fileset dir="${classes.dir}">
155 <include name="**/*.*" />
157 <!-- include xsds -->
158 <fileset dir="${java.dir}">
159 <include name="**/*.xsd" />
163 <include name="META-INF/MANIFEST.MF" />
168 <target name="srcjar" description="Build source jar file">
169 <mkdir dir="${dist.dir}" />
170 <jar destfile="${dist.dir}/${name}-${curr.release}-src.jar">
171 <fileset dir="${java.dir}">
172 <include name="**/*.java" />
177 <target name="alljar" depends="build, contrib-build" description="Build a jar file that includes all contrib code.">
178 <jar destfile="${dist.dir}/${name}-${curr.release}-all.jar">
179 <fileset dir="${classes.dir}">
180 <include name="**/*.*" />
182 <fileset dir="${contrib.classes.dir}">
183 <include name="**/*.*" />
185 <!-- include xsds -->
186 <fileset dir="${java.dir}">
187 <include name="**/*.xsd" />
192 <target name="war" depends="build" description="Build server war file">
193 <war destfile="${dist.dir}/${name}.war" webxml="web.xml" basedir="${classes.dir}">
194 <classes dir="${classes.dir}"/>
195 <lib dir="${lib.dir}">
196 <exclude name="${lib.dir}/servlet-api*.jar"/>
197 <exclude name="${lib.dir}/src/**"/>
202 <target name="contrib-build" depends="build, buildtest" description="Compile contrib packages (java and test) ">
203 <replace-dir dir="${contrib.classes.dir}" />
204 <javac destdir="${contrib.classes.dir}" target="${javac.version}" source="${javac.version}" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
205 <src path="${contrib.root.dir}" />
206 <src path="${contrib.root.dir}" />
207 <classpath refid="main-classpath" />
208 <classpath refid="contrib-classpath" />
210 <copy todir="${contrib.classes.dir}">
211 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
215 <target name="contrib-jar" depends="contrib-build" description="Build contrib jar file">
216 <jar destfile="${dist.dir}/${name}-contrib-${curr.release}.jar">
217 <fileset dir="${contrib.classes.dir}">
218 <include name="**/*.*" />
223 <target name="contrib-srcjar" description="Build contrib source jar file">
224 <mkdir dir="${dist.dir}" />
225 <jar destfile="${dist.dir}/${name}-contrib-${curr.release}-src.jar">
226 <fileset dir="${contrib.root.dir}/**/java">
227 <include name="**/*.java" />
232 <target name="contrib-junit" depends="contrib-jar" description="Run contrib junit tests except EC2 and Krati tests.">
233 <replace-dir dir="${contribtestreport.dir}" />
234 <replace-dir dir="${contribtesthtml.dir}" />
235 <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
236 <classpath refid="contrib-test-classpath" />
237 <formatter type="xml" />
238 <batchtest fork="yes" todir="${contribtestreport.dir}">
239 <fileset dir="${contrib.classes.dir}">
240 <include name="**/*Test.class" />
241 <exclude name="**/*PerformanceTest.class" />
242 <exclude name="**/*RemoteTest.class" />
243 <exclude name="**/Ec2*Test.class" />
244 <exclude name="**/Krati*Test.class" />
248 <junitreport todir="${contribtesthtml.dir}">
249 <fileset dir="${contribtestreport.dir}">
250 <include name="TEST-*.xml" />
252 <report todir="${contribtesthtml.dir}" format="frames" />
256 <target name="ec2testing-junit" depends="all" description="Run EC2 testing contrib junit tests.">
257 <copy todir="${testclasses.dir}">
258 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
260 <replace-dir dir="${contribtestreport.dir}" />
261 <replace-dir dir="${contribtesthtml.dir}" />
262 <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
264 <propertyref prefix="ec2" />
266 <classpath refid="contrib-test-classpath" />
267 <formatter type="xml" />
268 <batchtest fork="yes" todir="${contribtestreport.dir}">
269 <fileset dir="${contrib.classes.dir}">
270 <include name="**/Ec2SmokeTest.class" />
274 <junitreport todir="${contribtesthtml.dir}">
275 <fileset dir="${contribtestreport.dir}">
276 <include name="TEST-*.xml" />
278 <report todir="${contribtesthtml.dir}" format="frames" />
282 <target name="ec2testing-gossip" depends="contrib-jar" description="Run gossip tests on EC2.">
283 <copy todir="${testclasses.dir}">
284 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
286 <replace-dir dir="${contribtestreport.dir}" />
287 <replace-dir dir="${contribtesthtml.dir}" />
288 <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
290 <propertyref prefix="ec2" />
291 <propertyref prefix="log4j" />
292 <propertyref prefix="gossip" />
294 <classpath refid="contrib-test-classpath" />
295 <formatter type="xml" />
296 <batchtest fork="yes" todir="${contribtestreport.dir}">
297 <fileset dir="${contrib.classes.dir}">
298 <include name="**/Ec2GossipTest.class" />
302 <junitreport todir="${contribtesthtml.dir}">
303 <fileset dir="${contribtestreport.dir}">
304 <include name="TEST-*.xml" />
306 <report todir="${contribtesthtml.dir}" format="frames" />
310 <target name="ec2testing-rebalancing" depends="contrib-jar" description="Run rebalancing tests on EC2.">
311 <copy todir="${testclasses.dir}">
312 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
314 <replace-dir dir="${contribtestreport.dir}" />
315 <replace-dir dir="${contribtesthtml.dir}" />
316 <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
318 <propertyref prefix="ec2" />
319 <propertyref prefix="log4j" />
320 <propertyref prefix="rebalancing" />
322 <classpath refid="contrib-test-classpath" />
323 <formatter type="xml" />
324 <batchtest fork="yes" todir="${contribtestreport.dir}">
325 <fileset dir="${contrib.classes.dir}">
326 <include name="**/Ec2RebalancingTest.class" />
330 <junitreport todir="${contribtesthtml.dir}">
331 <fileset dir="${contribtestreport.dir}">
332 <include name="TEST-*.xml" />
334 <report todir="${contribtesthtml.dir}" format="frames" />
338 <macrodef name="create-release-artifacts">
339 <attribute name="version" />
341 <antcall target="all"/>
342 <zip destfile="${dist.dir}/${name}-@{version}.zip">
343 <zipfileset dir="." prefix="voldemort-@{version}" filemode="755" includes="bin/*"/>
344 <zipfileset dir="." prefix="voldemort-@{version}" includes="**">
345 <exclude name="${dist.dir}/*classes/"/>
346 <exclude name="bin/*"/>
347 <exclude name=".git*/**"/>
350 <tar destfile="${dist.dir}/${name}-@{version}.tar.gz" compression="gzip" longfile="gnu">
351 <tarfileset dir="." prefix="voldemort-@{version}" filemode="755" includes="bin/*"/>
352 <tarfileset dir="." prefix="voldemort-@{version}" includes="**">
353 <exclude name="${dist.dir}/*classes/"/>
354 <exclude name="${dist.dir}/*.zip"/>
355 <exclude name="bin/*"/>
356 <exclude name=".git*/**"/>
362 <target name="snapshot" description="Create a release-snapshot zip file with everything pre-built.">
363 <create-release-artifacts version="${curr.release.snapshot}" />
366 <target name="release" description="Create a release zip file with everything pre-built.">
367 <create-release-artifacts version="${curr.release}" />
370 <target name="hadoop-benchmark-jar" depends="build, contrib-build"
371 description="Build a jar file that includes all contrib code plus the necessary jars for running the hadoop benchmark.">
372 <jar destfile="${dist.dir}/hadoop-benchmark.jar">
373 <fileset dir="${classes.dir}">
374 <include name="**/*.*" />
376 <fileset dir="${contrib.classes.dir}">
377 <include name="**/*.*" />
379 <!-- include xsds -->
380 <fileset dir="${java.dir}">
381 <include name="**/*.xsd" />
384 <include name="lib/jdom*.jar"/>
385 <include name="lib/google-collect*.jar"/>
386 <include name="lib/commons-lang*.jar"/>
391 <target name="junit" depends="build, buildtest" description="Run junit tests.">
392 <replace-dir dir="${testreport.dir}" />
393 <replace-dir dir="${testhtml.dir}" />
394 <junit printsummary="yes" showoutput="true" maxmemory="2048m" timeout="1200000">
395 <classpath refid="test-classpath" />
396 <formatter type="xml" />
397 <batchtest fork="yes" todir="${testreport.dir}">
398 <fileset dir="${unittestsrc.dir}">
399 <include name="**/*Test.java" />
400 <exclude name="**/Abstract*.java" />
404 <junitreport todir="${testhtml.dir}">
405 <fileset dir="${testreport.dir}">
406 <include name="TEST-*.xml" />
408 <report todir="${testhtml.dir}" format="frames" />
412 <target name="junit-long" depends="build, buildtest, junit" description="Run long junit tests that uses larger data sets than normal junit tests.">
413 <replace-dir dir="${longtestreport.dir}" />
414 <replace-dir dir="${longtesthtml.dir}" />
415 <junit printsummary="yes" showoutput="true" maxmemory="2048m" fork="yes" timeout="5400000">
416 <classpath refid="test-classpath" />
417 <formatter type="xml" />
418 <batchtest todir="${longtestreport.dir}">
419 <fileset dir="${longtestsrc.dir}">
420 <include name="**/*Test.java" />
424 <junitreport todir="${longtesthtml.dir}">
425 <fileset dir="${longtestreport.dir}">
426 <include name="TEST-*.xml" />
428 <report todir="${longtesthtml.dir}" format="frames" />
432 <target name="junit-rebalance" depends="build, buildtest" description="Run junit tests only for rebalance.">
433 <replace-dir dir="${testreport.dir}" />
434 <replace-dir dir="${testhtml.dir}" />
435 <junit printsummary="yes" showoutput="true" maxmemory="2048m" timeout="1200000">
436 <classpath refid="test-classpath" />
437 <formatter type="xml" />
438 <batchtest fork="yes" todir="${testreport.dir}">
439 <fileset dir="${unittestsrc.dir}">
440 <include name="**/*Rebalance*Test.java" />
441 <exclude name="**/Abstract*.java" />
445 <junitreport todir="${testhtml.dir}">
446 <fileset dir="${testreport.dir}">
447 <include name="TEST-*.xml" />
449 <report todir="${testhtml.dir}" format="frames" />
453 <target name="junit-long-rebalance" depends="build, buildtest, junit-rebalance" description="Run long junit rebalance tests that uses larger data sets than normal junit tests.">
454 <replace-dir dir="${longtestreport.dir}" />
455 <replace-dir dir="${longtesthtml.dir}" />
456 <junit printsummary="yes" showoutput="true" maxmemory="2048m" fork="yes" timeout="5400000">
457 <classpath refid="test-classpath" />
458 <formatter type="xml" />
459 <batchtest todir="${longtestreport.dir}">
460 <fileset dir="${longtestsrc.dir}">
461 <include name="**/*Rebalance*Test.java" />
465 <junitreport todir="${longtesthtml.dir}">
466 <fileset dir="${longtestreport.dir}">
467 <include name="TEST-*.xml" />
469 <report todir="${longtesthtml.dir}" format="frames" />
473 <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)">
474 <replace-dir dir="${singletestreport.dir}" />
475 <replace-dir dir="${singletesthtml.dir}" />
476 <junit printsummary="on" showoutput="true" maxmemory="4096m">
477 <classpath refid="contrib-test-classpath" />
478 <classpath path="${log4j.properties.dir}" />
479 <formatter type="plain" />
480 <formatter type="xml" />
481 <test name="${test.name}" todir="${singletestreport.dir}"/>
483 <junitreport todir="${singletesthtml.dir}">
484 <fileset dir="${singletestreport.dir}">
485 <include name="TEST-*.xml" />
487 <report todir="${singletesthtml.dir}" format="frames" />
491 <target name="junit-all" depends="junit-long, contrib-junit" description="Run All junit tests including contrib.">
494 <macrodef name="make-javadocs">
495 <attribute name="dir" />
496 <attribute name="packagenames" />
497 <attribute name="javadir" />
499 <replace-dir dir="@{dir}" />
500 <javadoc sourcepath="@{javadir}" destdir="@{dir}" windowtitle="${display.name}" source="${javac.version}" author="true" version="true" use="true" packagenames="@{packagenames}">
501 <doctitle>${display.name}</doctitle>
502 <bottom>${author}</bottom>
503 <classpath refid="main-classpath" />
508 <target name="docs" description="Create complete Javadoc documentation">
509 <make-javadocs dir="${javadoc.dir}/all" packagenames="*" javadir="${java.dir}"/>
510 <make-javadocs dir="${javadoc.dir}/client" packagenames="voldemort.versioning.*, voldemort.client.*,voldemort.serialization.*" javadir="${java.dir}"/>
513 <target name="redeploy" depends="war, deploy">
516 <taskdef file="tomcat-tasks.properties">
518 <path location="${lib.dir}/catalina-ant.jar" />
522 <target name="list" description="List Tomcat applications">
523 <list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
526 <target name="deploy" description="Deploy application" depends="war">
527 <deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="${tomcat.context}" update="true" war="file:${dist.dir}/${name}.war" />
530 <target name="undeploy" description="Undeploy application">
531 <undeploy url="${tomcat.manager.url}"
532 username="${tomcat.manager.username}"
533 password="${tomcat.manager.password}"
534 path="${tomcat.context}"/>