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 <classpath refid="main-classpath" />
110 <target name="test" depends="build, buildtest" description="Build test jar file">
111 <jar destfile="${dist.dir}/${name}-test-${curr.release}.jar">
112 <fileset dir="${testclasses.dir}" />
116 <target name="protobuff" description="Generate source files from .proto files">
117 <pathconvert property="proto.sources" pathsep=" ">
118 <path id="proto-files">
119 <fileset dir="${protobuff.dir}" />
123 <property name="proto.path" location="${protobuff.dir}"/>
124 <property name="javaout.path" location="${java.dir}"/>
125 <property name="pythonout.path" location="${python.proto.dir}"/>
126 <exec executable="protoc" failonerror="true">
127 <arg value="--proto_path=${proto.path}"/>
128 <arg value="--java_out=${javaout.path}"/>
129 <arg value="--python_out=${pythonout.path}"/>
130 <arg line="${proto.sources}"/>
134 <target name="jar" depends="build" description="Build server jar file">
135 <jar destfile="${dist.dir}/${name}-${curr.release}.jar">
136 <fileset dir="${classes.dir}">
137 <include name="**/*.*" />
139 <!-- include xsds -->
140 <fileset dir="${java.dir}">
141 <include name="**/*.xsd" />
146 <target name="srcjar" description="Build source jar file">
147 <mkdir dir="${dist.dir}" />
148 <jar destfile="${dist.dir}/${name}-${curr.release}-src.jar">
149 <fileset dir="${java.dir}">
150 <include name="**/*.java" />
155 <target name="alljar" depends="build, contrib-build" description="Build a jar file that includes all contrib code.">
156 <jar destfile="${dist.dir}/${name}-${curr.release}-all.jar">
157 <fileset dir="${classes.dir}">
158 <include name="**/*.*" />
160 <fileset dir="${contrib.classes.dir}">
161 <include name="**/*.*" />
163 <!-- include xsds -->
164 <fileset dir="${java.dir}">
165 <include name="**/*.xsd" />
170 <target name="war" depends="build" description="Build server war file">
171 <war destfile="${dist.dir}/${name}.war" webxml="web.xml" basedir="${classes.dir}">
172 <classes dir="${classes.dir}"/>
173 <lib dir="${lib.dir}">
174 <exclude name="${lib.dir}/servlet-api*.jar"/>
175 <exclude name="${lib.dir}/src/**"/>
180 <target name="contrib-build" depends="build, buildtest" description="Compile contrib packages (java and test) ">
181 <replace-dir dir="${contrib.classes.dir}" />
182 <javac destdir="${contrib.classes.dir}" target="1.5" debug="true" deprecation="false" failonerror="true" includeantruntime="false">
183 <src path="${contrib.root.dir}" />
184 <src path="${contrib.root.dir}" />
185 <classpath refid="main-classpath" />
186 <classpath refid="contrib-classpath" />
188 <copy todir="${contrib.classes.dir}">
189 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
193 <target name="contrib-jar" depends="contrib-build" description="Build contrib jar file">
194 <jar destfile="${dist.dir}/${name}-contrib-${curr.release}.jar">
195 <fileset dir="${contrib.classes.dir}">
196 <include name="**/*.*" />
201 <target name="contrib-srcjar" description="Build contrib source jar file">
202 <mkdir dir="${dist.dir}" />
203 <jar destfile="${dist.dir}/${name}-contrib-${curr.release}-src.jar">
204 <fileset dir="${contrib.root.dir}/**/java">
205 <include name="**/*.java" />
210 <target name="contrib-junit" depends="contrib-jar" description="Run contrib junit tests except EC2 and Krati tests.">
211 <replace-dir dir="${contribtestreport.dir}" />
212 <replace-dir dir="${contribtesthtml.dir}" />
213 <junit printsummary="yes" maxmemory="1024m" showoutput="true" failureProperty="test.failure">
214 <classpath refid="contrib-test-classpath" />
215 <formatter type="xml" />
216 <batchtest fork="yes" todir="${contribtestreport.dir}">
217 <fileset dir="${contrib.classes.dir}">
218 <include name="**/*Test.class" />
219 <exclude name="**/*PerformanceTest.class" />
220 <exclude name="**/*RemoteTest.class" />
221 <exclude name="**/Ec2*Test.class" />
222 <exclude name="**/Krati*Test.class" />
226 <junitreport todir="${contribtesthtml.dir}">
227 <fileset dir="${contribtestreport.dir}">
228 <include name="TEST-*.xml" />
230 <report todir="${contribtesthtml.dir}" format="frames" />
234 <target name="ec2testing-junit" depends="all" description="Run EC2 testing contrib junit tests.">
235 <copy todir="${testclasses.dir}">
236 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
238 <replace-dir dir="${contribtestreport.dir}" />
239 <replace-dir dir="${contribtesthtml.dir}" />
240 <junit printsummary="yes" maxmemory="1024m" showoutput="true" failureProperty="test.failure">
242 <propertyref prefix="ec2" />
244 <classpath refid="contrib-test-classpath" />
245 <formatter type="xml" />
246 <batchtest fork="yes" todir="${contribtestreport.dir}">
247 <fileset dir="${contrib.classes.dir}">
248 <include name="**/Ec2SmokeTest.class" />
252 <junitreport todir="${contribtesthtml.dir}">
253 <fileset dir="${contribtestreport.dir}">
254 <include name="TEST-*.xml" />
256 <report todir="${contribtesthtml.dir}" format="frames" />
260 <target name="ec2testing-gossip" depends="contrib-jar" description="Run gossip tests on EC2.">
261 <copy todir="${testclasses.dir}">
262 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
264 <replace-dir dir="${contribtestreport.dir}" />
265 <replace-dir dir="${contribtesthtml.dir}" />
266 <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
268 <propertyref prefix="ec2" />
269 <propertyref prefix="log4j" />
270 <propertyref prefix="gossip" />
272 <classpath refid="contrib-test-classpath" />
273 <formatter type="xml" />
274 <batchtest fork="yes" todir="${contribtestreport.dir}">
275 <fileset dir="${contrib.classes.dir}">
276 <include name="**/Ec2GossipTest.class" />
280 <junitreport todir="${contribtesthtml.dir}">
281 <fileset dir="${contribtestreport.dir}">
282 <include name="TEST-*.xml" />
284 <report todir="${contribtesthtml.dir}" format="frames" />
288 <target name="ec2testing-rebalancing" depends="contrib-jar" description="Run rebalancing tests on EC2.">
289 <copy todir="${testclasses.dir}">
290 <fileset dir="${contrib.root.dir}/ec2-testing/resources" />
292 <replace-dir dir="${contribtestreport.dir}" />
293 <replace-dir dir="${contribtesthtml.dir}" />
294 <junit printsummary="yes" maxmemory="2048m" showoutput="true" failureProperty="test.failure">
296 <propertyref prefix="ec2" />
297 <propertyref prefix="log4j" />
298 <propertyref prefix="rebalancing" />
300 <classpath refid="contrib-test-classpath" />
301 <formatter type="xml" />
302 <batchtest fork="yes" todir="${contribtestreport.dir}">
303 <fileset dir="${contrib.classes.dir}">
304 <include name="**/Ec2RebalancingTest.class" />
308 <junitreport todir="${contribtesthtml.dir}">
309 <fileset dir="${contribtestreport.dir}">
310 <include name="TEST-*.xml" />
312 <report todir="${contribtesthtml.dir}" format="frames" />
316 <macrodef name="create-release-artifacts">
317 <attribute name="version" />
319 <antcall target="all"/>
320 <zip destfile="${dist.dir}/${name}-@{version}.zip">
321 <zipfileset dir="." prefix="voldemort-@{version}" filemode="755" includes="bin/*"/>
322 <zipfileset dir="." prefix="voldemort-@{version}" includes="**">
323 <exclude name="${dist.dir}/*classes"/>
324 <exclude name="bin/*"/>
325 <exclude name=".git*/**"/>
328 <tar destfile="${dist.dir}/${name}-@{version}.tar.gz" compression="gzip" longfile="gnu">
329 <tarfileset dir="." prefix="voldemort-@{version}" filemode="755" includes="bin/*"/>
330 <tarfileset dir="." prefix="voldemort-@{version}" includes="**">
331 <exclude name="${dist.dir}/*classes"/>
332 <exclude name="${dist.dir}/*.zip"/>
333 <exclude name="bin/*"/>
334 <exclude name=".git*/**"/>
340 <target name="snapshot" description="Create a release-snapshot zip file with everything pre-built.">
341 <create-release-artifacts version="${curr.release.snapshot}" />
344 <target name="release" description="Create a release zip file with everything pre-built.">
345 <create-release-artifacts version="${curr.release}" />
348 <target name="hadoop-benchmark-jar" depends="build, contrib-build"
349 description="Build a jar file that includes all contrib code plus the necessary jars for running the hadoop benchmark.">
350 <jar destfile="${dist.dir}/hadoop-benchmark.jar">
351 <fileset dir="${classes.dir}">
352 <include name="**/*.*" />
354 <fileset dir="${contrib.classes.dir}">
355 <include name="**/*.*" />
357 <!-- include xsds -->
358 <fileset dir="${java.dir}">
359 <include name="**/*.xsd" />
362 <include name="lib/jdom*.jar"/>
363 <include name="lib/google-collect*.jar"/>
364 <include name="lib/commons-lang*.jar"/>
369 <target name="junit" depends="build, buildtest" description="Run junit tests.">
370 <replace-dir dir="${testreport.dir}" />
371 <replace-dir dir="${testhtml.dir}" />
372 <junit printsummary="yes" showoutput="true" maxmemory="1024m">
373 <classpath refid="test-classpath" />
374 <formatter type="xml" />
375 <batchtest fork="yes" todir="${testreport.dir}">
376 <fileset dir="${unittestsrc.dir}">
377 <include name="**/*Test.java" />
378 <exclude name="**/Abstract*.java" />
382 <junitreport todir="${testhtml.dir}">
383 <fileset dir="${testreport.dir}">
384 <include name="TEST-*.xml" />
386 <report todir="${testhtml.dir}" format="frames" />
390 <target name="junit-test" depends="build, buildtest, contrib-jar" description="Run single junit test with -Dtest.name=">
391 <junit printsummary="yes" showoutput="true" maxmemory="1024m">
392 <classpath refid="contrib-test-classpath" />
393 <test name="${test.name}" />
397 <target name="junit-all" depends="junit, contrib-junit" description="Run All junit tests including contrib.">
400 <macrodef name="make-javadocs">
401 <attribute name="dir" />
402 <attribute name="packagenames" />
403 <attribute name="javadir" />
405 <replace-dir dir="@{dir}" />
406 <javadoc sourcepath="@{javadir}" destdir="@{dir}" windowtitle="${display.name}" source="1.5" author="true" version="true" use="true" packagenames="@{packagenames}">
407 <doctitle>${display.name}</doctitle>
408 <bottom>${author}</bottom>
409 <classpath refid="main-classpath" />
414 <target name="docs" description="Create complete Javadoc documentation">
415 <make-javadocs dir="${javadoc.dir}/all" packagenames="*" javadir="${java.dir}"/>
416 <make-javadocs dir="${javadoc.dir}/client" packagenames="voldemort.versioning.*, voldemort.client.*,voldemort.serialization.*" javadir="${java.dir}"/>
419 <target name="redeploy" depends="war, deploy">
422 <taskdef file="tomcat-tasks.properties">
424 <path location="${lib.dir}/catalina-ant.jar" />
428 <target name="list" description="List Tomcat applications">
429 <list url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" />
432 <target name="deploy" description="Deploy application" depends="war">
433 <deploy url="${tomcat.manager.url}" username="${tomcat.manager.username}" password="${tomcat.manager.password}" path="${tomcat.context}" update="true" war="file:${dist.dir}/${name}.war" />
436 <target name="undeploy" description="Undeploy application">
437 <undeploy url="${tomcat.manager.url}"
438 username="${tomcat.manager.username}"
439 password="${tomcat.manager.password}"
440 path="${tomcat.context}"/>