blob: 74002e2a3a2876ac944f9119a7db4ccd9ed51de4 [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
~ Licensed to the Apache Software Foundation (ASF) under one
~ or more contributor license agreements. See the NOTICE file
~ distributed with this work for additional information
~ regarding copyright ownership. The ASF licenses this file
~ to you under the Apache License, Version 2.0 (the
~ "License"); you may not use this file except in compliance
~ with the License. You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing,
~ software distributed under the License is distributed on an
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~ KIND, either express or implied. See the License for the
~ specific language governing permissions and limitations
~ under the License.
-->
<project basedir="." default="build" name="apache-cassandra"
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<property environment="env"/>
<property file="build.properties" />
<property name="debuglevel" value="source,lines,vars"/>
<property name="basedir" value="."/>
<property name="build.src" value="${basedir}/src"/>
<property name="build.src.java" value="${basedir}/src/java"/>
<property name="avro.src" value="${basedir}/src/avro"/>
<property name="build.src.gen-java" value="${basedir}/src/gen-java"/>
<property name="build.lib" value="${basedir}/lib"/>
<property name="build.dir" value="${basedir}/build"/>
<property name="build.dir.lib" value="${basedir}/build/lib"/>
<property name="build.test.dir" value="${build.dir}/test"/>
<property name="build.classes" value="${build.dir}/classes"/>
<property name="javadoc.dir" value="${build.dir}/javadoc"/>
<property name="interface.dir" value="${basedir}/interface"/>
<property name="interface.thrift.dir" value="${interface.dir}/thrift"/>
<property name="interface.thrift.gen-java" value="${interface.thrift.dir}/gen-java"/>
<property name="interface.avro.dir" value="${interface.dir}/avro"/>
<property name="test.dir" value="${basedir}/test"/>
<property name="test.resources" value="${test.dir}/resources"/>
<property name="test.lib" value="${build.dir}/test/lib"/>
<property name="test.classes" value="${build.dir}/test/classes"/>
<property name="test.conf" value="${test.dir}/conf"/>
<property name="test.data" value="${test.dir}/data"/>
<property name="test.name" value="*Test"/>
<property name="test.unit.src" value="${test.dir}/unit"/>
<property name="test.long.src" value="${test.dir}/long"/>
<property name="test.distributed.src" value="${test.dir}/distributed"/>
<property name="dist.dir" value="${build.dir}/dist"/>
<property name="base.version" value="0.7.4"/>
<condition property="version" value="${base.version}">
<isset property="release"/>
</condition>
<property name="version" value="${base.version}-SNAPSHOT"/>
<property name="version.properties.dir" value="${build.classes}/org/apache/cassandra/config/"/>
<property name="final.name" value="${ant.project.name}-${version}"/>
<property name="maven-ant-tasks.version" value="2.1.1" />
<property name="maven-ant-tasks.url"
value="http://repo2.maven.org/maven2/org/apache/maven/maven-ant-tasks" />
<!-- http://cobertura.sourceforge.net/ -->
<property name="cobertura.version" value="1.9.4.1"/>
<property name="cobertura.build.dir" value="${build.dir}/cobertura"/>
<property name="cobertura.report.dir" value="${cobertura.build.dir}/report"/>
<property name="cobertura.classes.dir" value="${cobertura.build.dir}/classes"/>
<property name="cobertura.datafile" value="${cobertura.build.dir}/cobertura.ser"/>
<condition property="maven-ant-tasks.jar.exists">
<available file="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" />
</condition>
<condition property="is.source.artifact">
<available file="${build.src.java}" type="dir" />
</condition>
<!--
Add all the dependencies.
-->
<path id="maven-ant-tasks.classpath" path="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" />
<path id="cassandra.classpath">
<pathelement location="${cobertura.classes.dir}"/>
<pathelement location="${build.classes}"/>
<fileset dir="${build.lib}">
<include name="**/*.jar" />
</fileset>
<fileset dir="${build.dir.lib}">
<include name="**/*.jar" />
</fileset>
</path>
<!--
Setup the output directories.
-->
<target name="init">
<fail unless="is.source.artifact"
message="Not a source artifact, stopping here." />
<mkdir dir="${build.classes}"/>
<mkdir dir="${test.lib}"/>
<mkdir dir="${test.classes}"/>
<mkdir dir="${build.src.gen-java}"/>
</target>
<target name="clean" description="Remove all locally created artifacts">
<delete dir="${build.test.dir}" />
<delete dir="${build.classes}" />
<delete dir="${cobertura.classes.dir}" />
<delete dir="${build.src.gen-java}" />
<delete dir="${interface.avro.dir}" />
<delete file="${build.dir}/internode.avpr" />
</target>
<target depends="clean" name="cleanall"/>
<target name="realclean" depends="clean">
<delete dir="${build.dir}" />
</target>
<!--
This generates the CLI grammar files from Cli.g
-->
<target name="check-gen-cli-grammar">
<uptodate property="cliUpToDate"
srcfile="${build.src.java}/org/apache/cassandra/cli/Cli.g"
targetfile="${build.src.gen-java}/org/apache/cassandra/cli/Cli.tokens"/>
</target>
<target name="gen-cli-grammar" depends="check-gen-cli-grammar" unless="cliUpToDate">
<echo>Building Grammar ${build.src.java}/org/apache/cassandra/cli/Cli.g ....</echo>
<java classname="org.antlr.Tool"
classpath="${build.lib}/antlr-3.1.3.jar"
fork="true"
failonerror="true">
<arg value="${build.src.java}/org/apache/cassandra/cli/Cli.g" />
<arg value="-fo" />
<arg value="${build.src.gen-java}/org/apache/cassandra/cli/" />
</java>
</target>
<!--
Fetch Maven Ant Tasks and Cassandra's dependencies
These targets are intentionally free of dependencies so that they
can be run stand-alone from a binary release artifact.
-->
<target name="maven-ant-tasks-download" unless="maven-ant-tasks.jar.exists">
<echo>Downloading Maven ANT Tasks...</echo>
<mkdir dir="${build.dir}" />
<get src="${maven-ant-tasks.url}/${maven-ant-tasks.version}/maven-ant-tasks-${maven-ant-tasks.version}.jar"
dest="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" usetimestamp="true" />
</target>
<target name="maven-ant-tasks-init" depends="maven-ant-tasks-download" unless="maven-ant-tasks.initialized">
<mkdir dir="${build.dir.lib}"/>
<typedef uri="antlib:org.apache.maven.artifact.ant" classpathref="maven-ant-tasks.classpath" />
<!-- define the remote repositories we use -->
<artifact:remoteRepository id="central" url="http://repo1.maven.org/maven2"/>
<artifact:remoteRepository id="java.net2" url="http://download.java.net/maven/2"/>
<artifact:remoteRepository id="apache" url="https://repository.apache.org/content/repositories/releases"/>
<artifact:remoteRepository id="cloudera" url="https://repository.cloudera.com/content/repositories/releases"/>
<!-- for distributed tests -->
<artifact:remoteRepository id="jclouds" url="http://jclouds.googlecode.com/svn/repo"/>
<artifact:remoteRepository id="oauth" url="http://oauth.googlecode.com/svn/code/maven"/>
<artifact:remoteRepository id="twttr" url="http://maven.twttr.com"/>
<property name="maven-ant-tasks.initialized" value="true"/>
</target>
<target name="maven-ant-tasks-retrieve-build" depends="maven-ant-tasks-init">
<artifact:dependencies filesetId="build-dependency-jars"
sourcesFilesetId="build-dependency-sources"
cacheDependencyRefs="true"
dependencyRefsBuildFile="${build.dir}/build-dependencies.xml">
<!-- FIXME: paranamer can be dropped after we're depending on avro
(since it depends on them). -->
<dependency groupId="com.thoughtworks.paranamer" artifactId="paranamer-ant" version="2.1"/>
<dependency groupId="junit" artifactId="junit" version="4.6" />
<dependency groupId="commons-logging" artifactId="commons-logging" version="1.1.1"/>
<dependency groupId="org.apache.rat" artifactId="apache-rat" version="0.6" />
<dependency groupId="com.cloudera.hadoop" artifactId="hadoop-core" version="0.20.2-320"/>
<dependency groupId="com.cloudera.hadoop" artifactId="hadoop-streaming" version="0.20.2-320"/>
<dependency groupId="net.sf.jopt-simple" artifactId="jopt-simple" version="3.2"/>
<dependency groupId="net.java.dev.jna" artifactId="jna" version="3.2.7"/>
<remoteRepository refid="central"/>
<remoteRepository refid="apache"/>
<remoteRepository refid="cloudera"/>
<remoteRepository refid="java.net2"/>
</artifact:dependencies>
<artifact:dependencies pathId="cobertura.classpath">
<dependency groupId="net.sourceforge.cobertura" artifactId="cobertura" version="${cobertura.version}"/>
<remoteRepository refid="central"/>
</artifact:dependencies>
<copy todir="${build.dir.lib}/jars">
<fileset refid="build-dependency-jars"/>
<mapper type="flatten"/>
</copy>
<copy todir="${build.dir.lib}/sources">
<fileset refid="build-dependency-sources"/>
<mapper type="flatten"/>
</copy>
</target>
<target name="maven-ant-tasks-retrieve-test" depends="maven-ant-tasks-init">
<artifact:dependencies filesetId="test-dependency-jars"
sourcesFilesetId="test-dependency-sources"
cacheDependencyRefs="true"
dependencyRefsBuildFile="${build.dir}/test-dependencies.xml">
<dependency groupId="org.apache.whirr" artifactId="whirr-core" version="0.3.0-incubating-SNAPSHOT"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-cli" version="0.3.0-incubating-SNAPSHOT"/>
<remoteRepository refid="apache"/>
<remoteRepository refid="central"/>
<remoteRepository refid="jclouds"/>
<remoteRepository refid="oauth"/>
<remoteRepository refid="twttr"/>
</artifact:dependencies>
<copy todir="${test.lib}/jars">
<fileset refid="test-dependency-jars"/>
<mapper type="flatten"/>
</copy>
<copy todir="${test.lib}/sources">
<fileset refid="test-dependency-sources"/>
<mapper type="flatten"/>
</copy>
</target>
<!--
Generate avro code
-->
<target name="check-avro-generate" depends="maven-ant-tasks-init">
<taskdef name="avro-protocol" classname="org.apache.avro.specific.ProtocolTask">
<classpath refid="cassandra.classpath" />
</taskdef>
<uptodate property="avroInterfaceUpToDate" srcfile="${interface.dir}/cassandra.genavro"
targetfile="${interface.avro.dir}/cassandra.avpr" />
<uptodate property="avroINProtoUpToDate" srcfile="${avro.src}/internode.genavro"
targetfile="${build.dir}/internode.avpr" />
</target>
<target name="avro-generate"
depends="avro-interface-generate-client,avro-interface-generate-internode"
description="Generates Java Avro classes for client and internal use." />
<target name="avro-interface-generate-client" unless="avroInterfaceUpToDate"
depends="init,check-avro-generate,maven-ant-tasks-retrieve-build">
<!-- A copy for interested clients. TODO: Jar this stuff up. -->
<avromacro protocolname="cassandra" inputfile="${interface.dir}/cassandra.genavro"
jsondir="${interface.avro.dir}" outputdir="${interface.avro.dir}" />
<!-- A copy for our build. -->
<avromacro protocolname="api" inputfile="${interface.dir}/cassandra.genavro"
jsondir="${build.dir}" outputdir="${build.src}" />
</target>
<target name="avro-interface-generate-internode" unless="avroINProtoUpToDate"
depends="init,check-avro-generate,maven-ant-tasks-retrieve-build">
<avromacro protocolname="internode" inputfile="${avro.src}/internode.genavro"
jsondir="${build.dir}" outputdir="${build.src}"/>
</target>
<macrodef name="avromacro">
<attribute name="protocolname" />
<attribute name="inputfile" />
<attribute name="jsondir" />
<attribute name="outputdir" />
<sequential>
<echo message="Generating Avro @{protocolname} code..." />
<mkdir dir="@{jsondir}" />
<!-- Generate json schema from genavro IDL -->
<java classname="org.apache.avro.tool.Main" fork="true">
<classpath refid="cassandra.classpath" />
<arg value="idl" />
<arg value="@{inputfile}" />
<arg value="@{jsondir}/@{protocolname}.avpr" />
</java>
<!-- Generate java code from JSON protocol schema -->
<avro-protocol destdir="@{outputdir}/gen-java">
<fileset file="@{jsondir}/@{protocolname}.avpr" />
</avro-protocol>
</sequential>
</macrodef>
<!--
Generate thrift code. We have targets to build java because
Cassandra depends on it, and python because that is what the system
tests run.
-->
<target name="gen-thrift-java" depends="rat-init" description="Generate Thrift Java artifacts">
<echo>Generating Thrift Java code from ${basedir}/interface/cassandra.thrift ....</echo>
<exec executable="thrift" dir="${basedir}/interface" failonerror="true">
<arg line="--gen java:hashcode" />
<arg line="-o ${interface.thrift.dir}" />
<arg line="cassandra.thrift" />
</exec>
<java classname="org.apache.rat.Report" fork="true"
output="${build.dir}/rat-report.log">
<classpath refid="rat.classpath" />
<arg value="-a" />
<arg value="--force" />
<arg value="interface/thrift" />
</java>
</target>
<target name="gen-thrift-py" description="Generate Thrift Python artifacts">
<echo>Generating Thrift Python code from ${basedir}/interface/cassandra.thrift ....</echo>
<exec executable="thrift" dir="${basedir}/interface" failonerror="true">
<arg line="--gen py" />
<arg line="-o ${interface.thrift.dir}" />
<arg line="cassandra.thrift" />
</exec>
</target>
<!-- create properties file with C version -->
<target name="createVersionPropFile">
<taskdef name="propertyfile" classname="org.apache.tools.ant.taskdefs.optional.PropertyFile"/>
<propertyfile file="${version.properties.dir}/version.properties">
<entry key="CassandraVersion" value="${version}"/>
</propertyfile>
</target>
<!--
The build target builds all the .class files
-->
<target name="build"
depends="maven-ant-tasks-retrieve-build,avro-generate,build-subprojects,build-project" description="Compile Cassandra classes"/>
<target name="build-subprojects" description="Compile Cassandra contrib projects"/>
<target name="codecoverage" depends="cobertura-instrument,test,cobertura-report" description="Create code coverage report"/>
<target depends="init,avro-generate,gen-cli-grammar" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="${build.classes}" includeantruntime="false">
<src path="${build.src.java}"/>
<src path="${build.src.gen-java}"/>
<src path="${interface.thrift.dir}/gen-java"/>
<classpath refid="cassandra.classpath"/>
</javac>
<taskdef name="paranamer" classname="com.thoughtworks.paranamer.ant.ParanamerGeneratorTask">
<classpath refid="cassandra.classpath" />
</taskdef>
<!--<paranamer sourceDirectory="${interface.avro.dir}"-->
<!--outputDirectory="${build.classes}"/>-->
<antcall target="createVersionPropFile"/>
</target>
<!--
The jar target makes cassandra.jar output.
-->
<target name="jar" depends="build" description="Assemble Cassandra JAR files">
<mkdir dir="${build.classes}/META-INF"/>
<copy file="LICENSE.txt" tofile="${build.classes}/META-INF/LICENSE.txt"/>
<copy file="NOTICE.txt" tofile="${build.classes}/META-INF/NOTICE.txt"/>
<jar jarfile="${build.dir}/${final.name}.jar"
basedir="${build.classes}">
<manifest>
<!-- <section name="org/apache/cassandra/infrastructure"> -->
<attribute name="Implementation-Title" value="Cassandra"/>
<attribute name="Implementation-Version" value="${version}"/>
<attribute name="Implementation-Vendor" value="Apache"/>
<attribute name="Premain-Class" value="org.apache.cassandra.infrastructure.continuations.CAgent"/>
<!-- </section> -->
</manifest>
</jar>
</target>
<!-- creates release tarballs -->
<target name="artifacts" depends="jar,javadoc"
description="Create Cassandra release artifacts">
<mkdir dir="${dist.dir}"/>
<copy todir="${dist.dir}/lib">
<fileset dir="${build.lib}"/>
<fileset dir="${build.dir}">
<include name="${final.name}.jar" />
</fileset>
</copy>
<copy todir="${dist.dir}/javadoc">
<fileset dir="${javadoc.dir}"/>
</copy>
<copy todir="${dist.dir}/bin">
<fileset dir="bin"/>
</copy>
<copy todir="${dist.dir}/conf">
<fileset dir="conf"/>
</copy>
<copy todir="${dist.dir}/interface">
<fileset dir="interface">
<include name="**/*.thrift" />
<include name="cassandra.genavro" />
<include name="avro/cassandra.avpr" />
</fileset>
</copy>
<copy todir="${dist.dir}/">
<fileset dir="${basedir}">
<include name="*.txt" />
</fileset>
</copy>
<tar compression="gzip" longfile="gnu"
destfile="${build.dir}/${final.name}-bin.tar.gz">
<!-- Everything but bin/ (default mode) -->
<tarfileset dir="${dist.dir}" prefix="${final.name}">
<include name="**"/>
<exclude name="bin/*" />
</tarfileset>
<!-- Shell includes in bin/ (default mode) -->
<tarfileset dir="${dist.dir}" prefix="${final.name}">
<include name="bin/*.in.sh" />
</tarfileset>
<!-- Executable scripts in bin/ -->
<tarfileset dir="${dist.dir}" prefix="${final.name}" mode="755">
<include name="bin/*"/>
<not>
<filename name="bin/*.in.sh" />
</not>
</tarfileset>
</tar>
<tar compression="gzip" longfile="gnu"
destfile="${build.dir}/${final.name}-src.tar.gz">
<tarfileset dir="${basedir}"
prefix="${final.name}-src">
<include name="**"/>
<exclude name="build/**" />
<exclude name="src/gen-java/**" />
<exclude name="interface/avro/**" />
<exclude name=".git/**" />
<exclude name="bin/*" /> <!-- handled separately below -->
<!-- exclude Eclipse files -->
<exclude name=".project" />
<exclude name=".classpath" />
<exclude name=".settings/**" />
<exclude name=".externalToolBuilders/**" />
</tarfileset>
<!-- Shell includes and batch files in bin/ -->
<tarfileset dir="${basedir}" prefix="${final.name}-src">
<include name="bin/*.in.sh" />
<include name="bin/*.bat" />
</tarfileset>
<!-- Everything else (assumed to be scripts), is executable -->
<tarfileset dir="${basedir}" prefix="${final.name}-src" mode="755">
<include name="bin/*"/>
<exclude name="bin/*.in.sh" />
<exclude name="bin/*.bat" />
</tarfileset>
</tar>
</target>
<target name="release" depends="artifacts,rat-init"
description="Create and QC release artifacts">
<checksum file="${build.dir}/${final.name}-bin.tar.gz"
forceOverwrite="yes"
todir="${build.dir}"
fileext=".md5"
algorithm="MD5" />
<checksum file="${build.dir}/${final.name}-src.tar.gz"
forceOverwrite="yes"
todir="${build.dir}"
fileext=".md5"
algorithm="MD5" />
<checksum file="${build.dir}/${final.name}-bin.tar.gz"
forceOverwrite="yes"
todir="${build.dir}"
fileext=".sha"
algorithm="SHA" />
<checksum file="${build.dir}/${final.name}-src.tar.gz"
forceOverwrite="yes"
todir="${build.dir}"
fileext=".sha"
algorithm="SHA" />
<rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
reportFile="${build.dir}/${final.name}-bin.rat.txt">
<tarfileset>
<gzipresource>
<file file="${build.dir}/${final.name}-bin.tar.gz" />
</gzipresource>
</tarfileset>
</rat:report>
<rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
reportFile="${build.dir}/${final.name}-src.rat.txt">
<tarfileset>
<gzipresource>
<file file="${build.dir}/${final.name}-src.tar.gz" />
</gzipresource>
</tarfileset>
</rat:report>
</target>
<target name="build-test" depends="build" description="Compile test classes">
<javac
debug="true"
debuglevel="${debuglevel}"
destdir="${test.classes}">
<classpath refid="cassandra.classpath"/>
<src path="${test.unit.src}"/>
<src path="${test.long.src}"/>
</javac>
<!-- Non-java resources needed by the test suite -->
<copy todir="${test.classes}">
<fileset dir="${test.resources}"/>
</copy>
</target>
<target name="build-distributed-test" depends="build-test,maven-ant-tasks-retrieve-test" description="Compile distributed test classes (which have additional deps)">
<javac
debug="true"
debuglevel="${debuglevel}"
destdir="${test.classes}">
<classpath>
<path refid="cassandra.classpath"/>
<pathelement location="${test.classes}"/>
<fileset dir="${test.lib}">
<include name="**/*.jar" />
</fileset>
</classpath>
<src path="${test.distributed.src}"/>
</javac>
</target>
<macrodef name="testmacro">
<attribute name="suitename" />
<attribute name="inputdir" />
<attribute name="timeout" />
<attribute name="forkmode" default="perTest"/>
<element name="optjvmargs" implicit="true" optional="true" />
<attribute name="filter" default="**/${test.name}.java"/>
<sequential>
<echo message="running @{suitename} tests"/>
<mkdir dir="${build.test.dir}/cassandra"/>
<mkdir dir="${build.test.dir}/output"/>
<junit fork="on" forkmode="@{forkmode}" failureproperty="testfailed" maxmemory="1024m" timeout="@{timeout}">
<sysproperty key="net.sourceforge.cobertura.datafile" file="${cobertura.datafile}"/>
<formatter type="xml" usefile="true"/>
<formatter type="brief" usefile="false"/>
<jvmarg value="-Dstorage-config=${test.conf}"/>
<jvmarg value="-Daccess.properties=${test.conf}/access.properties"/>
<jvmarg value="-Dlog4j.configuration=log4j-junit.properties" />
<jvmarg value="-ea"/>
<optjvmargs/>
<classpath>
<path refid="cassandra.classpath" />
<pathelement location="${test.classes}"/>
<path refid="cobertura.classpath"/>
<pathelement location="${test.conf}"/>
<fileset dir="${test.lib}">
<include name="**/*.jar" />
</fileset>
</classpath>
<batchtest todir="${build.test.dir}/output">
<fileset dir="@{inputdir}" includes="@{filter}" />
</batchtest>
</junit>
<fail message="Some @{suitename} test(s) failed.">
<condition>
<and>
<isset property="testfailed"/>
<not>
<isset property="ant.test.failure.ignore"/>
</not>
</and>
</condition>
</fail>
</sequential>
</macrodef>
<target name="test" depends="build-test" description="Execute unit tests">
<testmacro suitename="unit" inputdir="${test.unit.src}" timeout="60000">
<jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/>
<jvmarg value="-Dcorrupt-sstable-root=${test.data}/corrupt-sstables"/>
</testmacro>
</target>
<target name="msg-ser-gen-test" depends="build-test" description="Generates message serializations">
<testmacro suitename="unit" inputdir="${test.unit.src}"
timeout="60000" filter="**/SerializationsTest.java">
<jvmarg value="-Dcassandra.test-serialization-writes=True"/>
</testmacro>
</target>
<target name="msg-ser-test" depends="build-test" description="Tests message serializations">
<testmacro suitename="unit" inputdir="${test.unit.src}" timeout="60000"
filter="**/SerializationsTest.java"/>
</target>
<target name="msg-ser-test-7" depends="build-test" description="Generates message serializations">
<testmacro suitename="unit" inputdir="${test.unit.src}"
timeout="60000" filter="**/SerializationsTest.java">
<jvmarg value="-Dcassandra.version=0.7"/>
</testmacro>
</target>
<target name="long-test" depends="build-test" description="Execute functional tests">
<testmacro suitename="long" inputdir="${test.long.src}" timeout="300000" />
</target>
<!-- Depends on artifacts so that we can push a tarball to remote nodes, and has its own build target for cloudy deps. -->
<target name="distributed-test" depends="build-distributed-test,artifacts" description="Execute distributed tests: see ${test.distributed.src}/README.txt">
<testmacro suitename="distributed" inputdir="${test.distributed.src}" timeout="1200000" forkmode="once">
<jvmarg value="-Dwhirr.config=${whirr.config}"/>
<jvmarg value="-Dwhirr.cassandra_tarball=${build.dir}/${final.name}-bin.tar.gz"/>
</testmacro>
</target>
<!-- instruments the classes to later create code coverage reports -->
<target name="cobertura-instrument" depends="build,build-test">
<taskdef resource="tasks.properties">
<classpath refid="cobertura.classpath"/>
</taskdef>
<delete file="${cobertura.datafile}"/>
<cobertura-instrument todir="${cobertura.classes.dir}" datafile="${cobertura.datafile}">
<ignore regex="org.apache.log4j.*"/>
<fileset dir="${build.classes}">
<include name="**/*.class"/>
<exclude name="**/*Test.class"/>
<exclude name="**/*TestCase.class"/>
<exclude name="**/test/*.class"/>
<exclude name="${cobertura.excludes}"/>
</fileset>
</cobertura-instrument>
</target>
<!-- create both html and xml code coverage reports -->
<target name="cobertura-report">
<cobertura-report format="html" destdir="${cobertura.report.dir}" srcdir="${build.src.java}"
datafile="${cobertura.datafile}"/>
<cobertura-report format="xml" destdir="${cobertura.report.dir}" srcdir="${build.src.java}"
datafile="${cobertura.datafile}"/>
</target>
<!--
License audit tool
-->
<target name="rat-init" depends="maven-ant-tasks-init">
<artifact:dependencies pathId="rat.classpath">
<dependency groupId="org.apache.rat" artifactId="apache-rat-tasks" version="0.6" />
</artifact:dependencies>
<typedef uri="antlib:org.apache.rat.anttasks" classpathref="rat.classpath"/>
</target>
<target name="rat-check" depends="rat-init">
<rat:report xmlns:rat="antlib:org.apache.rat.anttasks"
reportFile="${build.dir}/rat-report.log">
<fileset dir="." excludesfile=".rat-excludes" />
</rat:report>
<condition property="rat.passed">
<isfileselected file="${build.dir}/rat-report.log">
<containsregexp expression="^0 Unknown Licenses"/>
</isfileselected>
</condition>
<fail unless="rat.passed">Unknown licenses: See build/rat-report.log.</fail>
</target>
<target name="rat-write" depends="rat-init">
<echo>RAT: invoking addLicense to write missing headers</echo>
<java classname="org.apache.rat.Report" fork="true"
output="${build.dir}/rat-report.log">
<classpath refid="rat.classpath" />
<arg value="-a" />
<arg value="--force" />
<arg value="." />
</java>
</target>
<target name="javadoc" depends="init" description="Create javadoc">
<tstamp>
<format property="YEAR" pattern="yyyy"/>
</tstamp>
<javadoc destdir="${javadoc.dir}" author="true" version="true" use="true"
windowtitle="${ant.project.name} API" classpathref="cassandra.classpath"
bottom="Copyright &amp;copy; ${YEAR} The Apache Software Foundation"
useexternalfile="yes"
maxmemory="256m">
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
<fileset dir="${interface.thrift.gen-java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</javadoc>
</target>
<!-- Generate Eclipse project description files -->
<target name="generate-eclipse-files" depends="build">
<echo file=".project"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>${eclipse.project.name}</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>full,incremental,auto,clean,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/Cassandra_Ant_Builder.launch</value>
</dictionary>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>]]>
</echo>
<echo file=".classpath"><![CDATA[<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/java"/>
<classpathentry kind="src" path="src/gen-java"/>
<classpathentry kind="src" path="interface/avro/gen-java"/>
<classpathentry kind="src" path="interface/thrift/gen-java"/>
<classpathentry kind="src" path="test/unit"/>
<classpathentry kind="src" path="test/long"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="build/classes"/>
<classpathentry kind="lib" path="build/test/classes"/>
<classpathentry kind="lib" path="test/conf"/>
]]>
</echo>
<path id="eclipse-project-libs-path">
<fileset dir="lib">
<include name="**/*.jar" />
</fileset>
<fileset dir="build/lib/jars">
<include name="**/*.jar" />
</fileset>
</path>
<property name="eclipse-project-libs" refid="eclipse-project-libs-path"/>
<script language="javascript"> <![CDATA[
importClass(java.io.File);
jars = project.getProperty("eclipse-project-libs").split(":");
cp = "";
for (i=0; i< jars.length; i++) {
cp += ' <classpathentry kind="lib" path="'+jars[i]+'"/>\n';
}
cp += '</classpath>';
echo = project.createTask("echo");
echo.setMessage(cp);
echo.setFile(new File(".classpath"));
echo.setAppend(true);
echo.perform();
]]> </script>
<mkdir dir=".settings" />
<mkdir dir=".externalToolBuilders" />
<echo file=".externalToolBuilders/Cassandra_Ant_Builder.launch"><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_AFTER_CLEAN_TARGETS" value="build,build-test,"/>
<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_AUTO_TARGETS" value="build,build-test,"/>
<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_CLEAN_TARGETS" value="build,build-test,"/>
<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_MANUAL_TARGETS" value="build,build-test,"/>
<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/${eclipse.project.name}/build.xml"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="${eclipse.project.name}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="$${workspace_loc:/${eclipse.project.name}/build.xml}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,clean,"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="$${workspace_loc:/${eclipse.project.name}}"/>
</launchConfiguration>]]>
</echo>
</target>
<pathconvert property="eclipse.project.name">
<path path="${basedir}" />
<regexpmapper from="^.*/([^/]+)$$" to="\1" handledirsep="yes" />
</pathconvert>
<!-- Clean Eclipse project description files -->
<target name="clean-eclipse-files">
<delete file=".project" />
<delete file=".classpath" />
<delete dir=".settings" />
<delete dir=".externalToolBuilders" />
<delete dir="build/eclipse-classes" />
</target>
</project>