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" />
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 <fileset dir="${dist.dir}">
31 <include name="${name}-${curr.release}.jar" />
33 <fileset dir="${contrib.root.dir}">
34 <include name="**/*.jar" />
36 <path refid="test-classpath" />
39 <path id="test-classpath">
40 <pathelement path="${env.VOLD_TEST_JARS}" />
41 <path refid="main-classpath" />
42 <pathelement path="${testclasses.dir}" />
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" />
51 <pathelement path="${testclasses.dir}" />
54 <macrodef name="replace-dir">
55 <attribute name="dir" />
57 <delete dir="@{dir}" />
58 <mkdir dir="@{dir}" />
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}" />
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" />
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" />
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" />
96 <copy todir="${testclasses.dir}">
97 <fileset dir="${unittestsrc.dir}">
98 <exclude name="**/*.java" />
99 <exclude name="**/*.html" />
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" />
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}" />
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}" />
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}"/>
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="**/*.*" />
140 <!-- include xsds -->
141 <fileset dir="${java.dir}">
142 <include name="**/*.xsd" />
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" />
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="**/*.*" />
161 <fileset dir="${contrib.classes.dir}">
162 <include name="**/*.*" />
164 <!-- include xsds -->
165 <fileset dir="${java.dir}">
166 <include name="**/*.xsd" />
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/**"/>
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" />
189 <copy todir="${contrib.classes.dir}">
190 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
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="**/*.*" />
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" />
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" />
227 <junitreport todir="${contribtesthtml.dir}">
228 <fileset dir="${contribtestreport.dir}">
229 <include name="TEST-*.xml" />
231 <report todir="${contribtesthtml.dir}" format="frames" />
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" />
239 <replace-dir dir="${contribtestreport.dir}" />
240 <replace-dir dir="${contribtesthtml.dir}" />
241 <junit printsummary="yes" maxmemory="1024m" showoutput="true" failureProperty="test.failure">
243 <propertyref prefix="ec2" />
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" />
253 <junitreport todir="${contribtesthtml.dir}">
254 <fileset dir="${contribtestreport.dir}">
255 <include name="TEST-*.xml" />
257 <report todir="${contribtesthtml.dir}" format="frames" />
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" />
265 <replace-dir dir="${contribtestreport.dir}" />
266 <replace-dir dir="${contribtesthtml.dir}" />
267 <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
269 <propertyref prefix="ec2" />
270 <propertyref prefix="log4j" />
271 <propertyref prefix="gossip" />
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" />
281 <junitreport todir="${contribtesthtml.dir}">
282 <fileset dir="${contribtestreport.dir}">
283 <include name="TEST-*.xml" />
285 <report todir="${contribtesthtml.dir}" format="frames" />
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" />
293 <replace-dir dir="${contribtestreport.dir}" />
294 <replace-dir dir="${contribtesthtml.dir}" />
295 <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
297 <propertyref prefix="ec2" />
298 <propertyref prefix="log4j" />
299 <propertyref prefix="rebalancing" />
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" />
309 <junitreport todir="${contribtesthtml.dir}">
310 <fileset dir="${contribtestreport.dir}">
311 <include name="TEST-*.xml" />
313 <report todir="${contribtesthtml.dir}" format="frames" />
317 <macrodef name="create-release-artifacts">
318 <attribute name="version" />
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*/**"/>
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*/**"/>
341 <target name="snapshot" description="Create a release-snapshot zip file with everything pre-built.">
342 <create-release-artifacts version="${curr.release.snapshot}" />
345 <target name="release" description="Create a release zip file with everything pre-built.">
346 <create-release-artifacts version="${curr.release}" />
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="**/*.*" />
355 <fileset dir="${contrib.classes.dir}">
356 <include name="**/*.*" />
358 <!-- include xsds -->
359 <fileset dir="${java.dir}">
360 <include name="**/*.xsd" />
363 <include name="lib/jdom*.jar"/>
364 <include name="lib/google-collect*.jar"/>
365 <include name="lib/commons-lang*.jar"/>
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" />
383 <junitreport todir="${testhtml.dir}">
384 <fileset dir="${testreport.dir}">
385 <include name="TEST-*.xml" />
387 <report todir="${testhtml.dir}" format="frames" />
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="${testreport.dir}" />
393 <replace-dir dir="${testhtml.dir}" />
394 <junit printsummary="yes" showoutput="true" maxmemory="1024m">
395 <classpath refid="test-classpath" />
396 <formatter type="xml" />
397 <batchtest fork="yes" todir="${testreport.dir}">
398 <fileset dir="${longtestsrc.dir}">
399 <include name="**/*Test.java" />
403 <junitreport todir="${testhtml.dir}">
404 <fileset dir="${testreport.dir}">
405 <include name="TEST-*.xml" />
407 <report todir="${testhtml.dir}" format="frames" />
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}" />
418 <target name="junit-all" depends="junit-long, contrib-junit" description="Run All junit tests including contrib.">
421 <macrodef name="make-javadocs">
422 <attribute name="dir" />
423 <attribute name="packagenames" />
424 <attribute name="javadir" />
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" />
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}"/>
440 <target name="redeploy" depends="war, deploy">
443 <taskdef file="tomcat-tasks.properties">
445 <path location="${lib.dir}/catalina-ant.jar" />
449 <target name="list" description="List Tomcat applications">
450 <list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
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" />
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}"/>