cassandra/build.xml

1453 lines
66 KiB
XML

<?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="jar" name="apache-cassandra"
xmlns:artifact="antlib:org.apache.maven.artifact.ant">
<property environment="env"/>
<property file="build.properties" />
<property file="build.properties.default" />
<property name="debuglevel" value="source,lines,vars"/>
<!-- default version and SCM information -->
<property name="base.version" value="1.2.19"/>
<property name="scm.connection" value="scm:git://git.apache.org/cassandra.git"/>
<property name="scm.developerConnection" value="scm:git://git.apache.org/cassandra.git"/>
<property name="scm.url" value="http://git-wip-us.apache.org/repos/asf?p=cassandra.git;a=tree"/>
<!-- directory details -->
<property name="basedir" value="."/>
<property name="build.src" value="${basedir}/src"/>
<property name="build.src.java" value="${basedir}/src/java"/>
<property name="build.src.resources" value="${basedir}/src/resources"/>
<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="build.classes.main" value="${build.classes}/main" />
<property name="build.classes.thrift" value="${build.classes}/thrift" />
<property name="javadoc.dir" value="${build.dir}/javadoc"/>
<property name="javadoc.jars.dir" value="${build.dir}/javadocs"/>
<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="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.methods" value=""/>
<property name="test.unit.src" value="${test.dir}/unit"/>
<property name="test.long.src" value="${test.dir}/long"/>
<property name="dist.dir" value="${build.dir}/dist"/>
<property name="source.version" value="1.6"/>
<property name="target.version" value="1.6"/>
<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.main}/org/apache/cassandra/config/" />
<property name="final.name" value="${ant.project.name}-${version}"/>
<!-- details of what version of Maven ANT Tasks to fetch -->
<property name="maven-ant-tasks.version" value="2.1.3" />
<property name="maven-ant-tasks.local" value="${user.home}/.m2/repository/org/apache/maven/maven-ant-tasks"/>
<property name="maven-ant-tasks.url"
value="http://repo2.maven.org/maven2/org/apache/maven/maven-ant-tasks" />
<!-- details of how and which Maven repository we publish to -->
<property name="maven.version" value="3.0.3" />
<condition property="maven-repository-url" value="https://repository.apache.org/service/local/staging/deploy/maven2">
<isset property="release"/>
</condition>
<condition property="maven-repository-id" value="apache.releases.https">
<isset property="release"/>
</condition>
<property name="maven-repository-url" value="https://repository.apache.org/content/repositories/snapshots"/>
<property name="maven-repository-id" value="apache.snapshots.https"/>
<property name="test.timeout" value="60000" />
<property name="test.long.timeout" value="600000" />
<!-- 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="maven-ant-tasks.jar.local">
<available file="${maven-ant-tasks.local}/${maven-ant-tasks.version}/maven-ant-tasks-${maven-ant-tasks.version}.jar" />
</condition>
<condition property="is.source.artifact">
<available file="${build.src.java}" type="dir" />
</condition>
<tstamp>
<format property="YEAR" pattern="yyyy"/>
</tstamp>
<!--
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.main}" />
<pathelement location="${build.classes.thrift}" />
<fileset dir="${build.lib}">
<include name="**/*.jar" />
<exclude name="**/*-sources.jar"/>
</fileset>
<fileset dir="${build.dir.lib}">
<include name="**/*.jar" />
<exclude name="**/*-sources.jar"/>
</fileset>
</path>
<macrodef name="create-javadoc">
<attribute name="destdir"/>
<element name="filesets"/>
<sequential>
<javadoc destdir="@{destdir}" 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">
<filesets/>
</javadoc>
</sequential>
</macrodef>
<!--
Setup the output directories.
-->
<target name="init">
<fail unless="is.source.artifact"
message="Not a source artifact, stopping here." />
<mkdir dir="${build.classes.main}"/>
<mkdir dir="${build.classes.thrift}"/>
<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 file="${build.dir}/internode.avpr" />
</target>
<target depends="clean" name="cleanall"/>
<target name="realclean" depends="clean" description="Remove the entire build directory and all downloaded artifacts">
<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.2.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>
<!--
This generates the CQL grammar files from Cql.g
-->
<target name="check-gen-cql2-grammar">
<uptodate property="cql2current"
srcfile="${build.src.java}/org/apache/cassandra/cql/Cql.g"
targetfile="${build.src.gen-java}/org/apache/cassandra/cql/Cql.tokens"/>
</target>
<target name="check-gen-cql3-grammar">
<uptodate property="cql3current"
srcfile="${build.src.java}/org/apache/cassandra/cql3/Cql.g"
targetfile="${build.src.gen-java}/org/apache/cassandra/cql3/Cql.tokens"/>
</target>
<target name="gen-cql2-grammar" depends="check-gen-cql2-grammar" unless="cql2current">
<echo>Building Grammar ${build.src.java}/org/apache/cassandra/cql/Cql.g ...</echo>
<java classname="org.antlr.Tool"
classpath="${build.lib}/antlr-3.2.jar"
fork="true"
failonerror="true">
<arg value="${build.src.java}/org/apache/cassandra/cql/Cql.g" />
<arg value="-fo" />
<arg value="${build.src.gen-java}/org/apache/cassandra/cql/" />
</java>
</target>
<target name="gen-cql3-grammar" depends="check-gen-cql3-grammar" unless="cql3current">
<echo>Building Grammar ${build.src.java}/org/apache/cassandra/cql3/Cql.g ...</echo>
<java classname="org.antlr.Tool"
classpath="${build.lib}/antlr-3.2.jar"
fork="true"
failonerror="true">
<arg value="${build.src.java}/org/apache/cassandra/cql3/Cql.g" />
<arg value="-fo" />
<arg value="${build.src.gen-java}/org/apache/cassandra/cql3/" />
</java>
</target>
<target name="generate-cql-html" depends="maven-ant-tasks-init" description="Generate HTML from textile source">
<artifact:dependencies pathId="wikitext.classpath">
<dependency groupId="com.datastax.wikitext" artifactId="wikitext-core-ant" version="1.3"/>
<dependency groupId="org.fusesource.wikitext" artifactId="textile-core" version="1.3"/>
</artifact:dependencies>
<taskdef classpathref="wikitext.classpath" resource="wikitexttasks.properties" />
<wikitext-to-html markupLanguage="Textile">
<fileset dir="${basedir}">
<include name="doc/cql/*.textile"/>
</fileset>
<fileset dir="${basedir}">
<include name="doc/cql3/*.textile"/>
</fileset>
</wikitext-to-html>
</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-localrepo" unless="maven-ant-tasks.jar.exists" if="maven-ant-tasks.jar.local"
description="Fetch Maven ANT Tasks from Maven Local Repository">
<mkdir dir="${build.dir}" />
<copy file="${maven-ant-tasks.local}/${maven-ant-tasks.version}/maven-ant-tasks-${maven-ant-tasks.version}.jar"
tofile="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar"/>
<property name="maven-ant-tasks.jar.exists" value="true"/>
</target>
<target name="maven-ant-tasks-download" depends="maven-ant-tasks-localrepo" unless="maven-ant-tasks.jar.exists"
description="Fetch Maven ANT Tasks from Maven Central Repositroy">
<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"
description="Initialize Maven ANT Tasks">
<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="${artifact.remoteRepository.central}"/>
<artifact:remoteRepository id="java.net2" url="${artifact.remoteRepository.java.net2}"/>
<artifact:remoteRepository id="apache" url="${artifact.remoteRepository.apache}"/>
<macrodef name="install">
<attribute name="pomFile"/>
<attribute name="file"/>
<attribute name="classifier" default=""/>
<attribute name="packaging" default="jar"/>
<sequential>
<artifact:mvn mavenVersion="${maven.version}" fork="true" failonerror="true">
<arg value="org.apache.maven.plugins:maven-install-plugin:2.3.1:install-file" />
<arg value="-DpomFile=@{pomFile}" />
<arg value="-Dfile=@{file}" />
<arg value="-Dclassifier=@{classifier}" />
<arg value="-Dpackaging=@{packaging}" />
</artifact:mvn>
</sequential>
</macrodef>
<macrodef name="deploy">
<attribute name="pomFile"/>
<attribute name="file"/>
<attribute name="classifier" default=""/>
<attribute name="packaging" default="jar"/>
<sequential>
<artifact:mvn mavenVersion="${maven.version}" fork="true" failonerror="true">
<jvmarg value="-Xmx512m"/>
<arg value="org.apache.maven.plugins:maven-gpg-plugin:1.4:sign-and-deploy-file" />
<arg value="-DretryFailedDeploymentCount=5" />
<arg value="-Durl=${maven-repository-url}" />
<arg value="-DrepositoryId=${maven-repository-id}" />
<arg value="-DpomFile=@{pomFile}" />
<arg value="-Dfile=@{file}" />
<arg value="-Dclassifier=@{classifier}" />
<arg value="-Dpackaging=@{packaging}" />
<arg value="-Papache-release" />
</artifact:mvn>
</sequential>
</macrodef>
<property name="maven-ant-tasks.initialized" value="true"/>
</target>
<!-- this task defines the dependencies that will be fetched by Maven ANT Tasks
the dependencies are re-used for publishing artifacts to Maven Central
in order to keep everything consistent -->
<target name="maven-declare-dependencies" depends="maven-ant-tasks-init"
description="Define dependencies and dependency versions">
<!-- The parent pom defines the versions of all dependencies -->
<artifact:pom id="parent-pom"
groupId="org.apache.cassandra"
artifactId="cassandra-parent"
packaging="pom"
version="${version}"
url="http://cassandra.apache.org"
name="Apache Cassandra"
inceptionYear="2009"
description="The Apache Cassandra Project develops a highly scalable second-generation distributed database, bringing together Dynamo's fully distributed design and Bigtable's ColumnFamily-based data model.">
<license name="The Apache Software License, Version 2.0" url="http://www.apache.org/licenses/LICENSE-2.0.txt"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
<dependencyManagement>
<dependency groupId="org.xerial.snappy" artifactId="snappy-java" version="1.0.5"/>
<dependency groupId="net.jpountz.lz4" artifactId="lz4" version="1.1.0"/>
<dependency groupId="com.ning" artifactId="compress-lzf" version="0.8.4"/>
<dependency groupId="com.google.guava" artifactId="guava" version="13.0.1"/>
<dependency groupId="commons-cli" artifactId="commons-cli" version="1.1"/>
<dependency groupId="commons-codec" artifactId="commons-codec" version="1.2"/>
<dependency groupId="commons-lang" artifactId="commons-lang" version="2.6"/>
<dependency groupId="com.googlecode.concurrentlinkedhashmap" artifactId="concurrentlinkedhashmap-lru" version="1.3"/>
<dependency groupId="org.antlr" artifactId="antlr" version="3.2"/>
<dependency groupId="org.slf4j" artifactId="slf4j-api" version="1.7.2"/>
<dependency groupId="org.slf4j" artifactId="slf4j-log4j12" version="1.7.2"/>
<dependency groupId="org.codehaus.jackson" artifactId="jackson-core-asl" version="1.9.2"/>
<dependency groupId="org.codehaus.jackson" artifactId="jackson-mapper-asl" version="1.9.2"/>
<dependency groupId="jline" artifactId="jline" version="1.0">
<exclusion groupId="junit" artifactId="junit"/>
</dependency>
<dependency groupId="com.googlecode.json-simple" artifactId="json-simple" version="1.1"/>
<dependency groupId="com.github.stephenc.high-scale-lib" artifactId="high-scale-lib" version="1.1.2"/>
<dependency groupId="com.github.stephenc" artifactId="jamm" version="0.2.5"/>
<dependency groupId="org.yaml" artifactId="snakeyaml" version="1.6"/>
<dependency groupId="org.apache.cassandra.deps" artifactId="avro" version="1.4.0-cassandra-1">
<exclusion groupId="org.jboss.netty" artifactId="netty"/>
<exclusion groupId="com.thoughtworks.paranamer" artifactId="paranamer"/>
<exclusion groupId="com.thoughtworks.paranamer" artifactId="paranamer-ant"/>
<exclusion groupId="org.apache.velocity" artifactId="velocity"/>
</dependency>
<dependency groupId="org.apache.thrift" artifactId="libthrift" version="0.7.0"/>
<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">
<exclusion groupId="commons-lang" artifactId="commons-lang"/>
</dependency>
<dependency groupId="org.apache.hadoop" artifactId="hadoop-core" version="1.0.3"/>
<dependency groupId="org.apache.hadoop" artifactId="hadoop-minicluster" version="1.0.3"/>
<dependency groupId="org.apache.pig" artifactId="pig" version="0.10.0"/>
<dependency groupId="net.sf.jopt-simple" artifactId="jopt-simple" version="3.2"/>
<dependency groupId="net.java.dev.jna" artifactId="jna" version="3.2.7"/>
<dependency groupId="net.sourceforge.cobertura" artifactId="cobertura" version="${cobertura.version}"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-core" version="0.4.0-incubating"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-cli" version="0.4.0-incubating"/>
<dependency groupId="org.jclouds.provider" artifactId="aws-s3" version="1.0-beta-9b" />
<dependency groupId="log4j" artifactId="log4j" version="1.2.16" />
<dependency groupId="org.apache.cassandra" artifactId="cassandra-all" version="${version}" />
<dependency groupId="org.apache.cassandra" artifactId="cassandra-thrift" version="${version}" />
<dependency groupId="com.yammer.metrics" artifactId="metrics-core" version="2.2.0" />
<dependency groupId="edu.stanford.ppl" artifactId="snaptree" version="0.1" />
<dependency groupId="org.mindrot" artifactId="jbcrypt" version="0.3m" />
<dependency groupId="io.netty" artifactId="netty" version="3.6.6.Final" />
</dependencyManagement>
<developer id="alakshman" name="Avinash Lakshman"/>
<developer id="antelder" name="Anthony Elder"/>
<developer id="brandonwilliams" name="Brandon Williams"/>
<developer id="eevans" name="Eric Evans"/>
<developer id="gdusbabek" name="Gary Dusbabek"/>
<developer id="goffinet" name="Chris Goffinet"/>
<developer id="jaakko" name="Laine Jaakko Olavi"/>
<developer id="jake" name="T Jake Luciani"/>
<developer id="jbellis" name="Jonathan Ellis"/>
<developer id="johan" name="Johan Oskarsson"/>
<developer id="junrao" name="Jun Rao"/>
<developer id="mriou" name="Matthieu Riou"/>
<developer id="pmalik" name="Prashant Malik"/>
<developer id="slebresne" name="Sylvain Lebresne"/>
</artifact:pom>
<!-- each dependency set then defines the subset of the dependencies for that dependency set -->
<artifact:pom id="build-deps-pom"
artifactId="cassandra-build-deps">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<!-- FIXME: paranamer can be dropped after we're depending on avro
(since it depends on them). -->
<dependency groupId="com.thoughtworks.paranamer" artifactId="paranamer-ant"/>
<dependency groupId="junit" artifactId="junit"/>
<dependency groupId="commons-logging" artifactId="commons-logging"/>
<dependency groupId="org.apache.rat" artifactId="apache-rat"/>
<dependency groupId="org.apache.hadoop" artifactId="hadoop-core"/>
<dependency groupId="org.apache.hadoop" artifactId="hadoop-minicluster"/>
<dependency groupId="org.apache.pig" artifactId="pig"/>
<dependency groupId="net.sf.jopt-simple" artifactId="jopt-simple"/>
<dependency groupId="net.java.dev.jna" artifactId="jna"/>
</artifact:pom>
<artifact:pom id="coverage-deps-pom"
artifactId="cassandra-coverage-deps">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<dependency groupId="net.sourceforge.cobertura" artifactId="cobertura"/>
</artifact:pom>
<artifact:pom id="test-deps-pom"
artifactId="cassandra-test-deps">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-core"/>
<dependency groupId="org.apache.whirr" artifactId="whirr-cli"/>
<dependency groupId="org.jclouds.provider" artifactId="aws-s3"/>
</artifact:pom>
<!-- now the pom's for artifacts being deployed to Maven Central -->
<artifact:pom id="all-pom"
artifactId="cassandra-all"
url="http://cassandra.apache.org"
name="Apache Cassandra">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
<dependency groupId="org.xerial.snappy" artifactId="snappy-java"/>
<dependency groupId="net.jpountz.lz4" artifactId="lz4"/>
<dependency groupId="com.ning" artifactId="compress-lzf"/>
<dependency groupId="com.google.guava" artifactId="guava"/>
<dependency groupId="commons-cli" artifactId="commons-cli"/>
<dependency groupId="commons-codec" artifactId="commons-codec"/>
<dependency groupId="commons-lang" artifactId="commons-lang"/>
<dependency groupId="com.googlecode.concurrentlinkedhashmap" artifactId="concurrentlinkedhashmap-lru"/>
<dependency groupId="org.antlr" artifactId="antlr"/>
<dependency groupId="org.slf4j" artifactId="slf4j-api"/>
<dependency groupId="org.apache.cassandra.deps" artifactId="avro"/>
<dependency groupId="org.codehaus.jackson" artifactId="jackson-core-asl"/>
<dependency groupId="org.codehaus.jackson" artifactId="jackson-mapper-asl"/>
<dependency groupId="jline" artifactId="jline"/>
<dependency groupId="com.googlecode.json-simple" artifactId="json-simple"/>
<dependency groupId="com.github.stephenc.high-scale-lib" artifactId="high-scale-lib"/>
<dependency groupId="org.yaml" artifactId="snakeyaml"/>
<dependency groupId="edu.stanford.ppl" artifactId="snaptree"/>
<dependency groupId="org.mindrot" artifactId="jbcrypt"/>
<dependency groupId="com.yammer.metrics" artifactId="metrics-core"/>
<dependency groupId="log4j" artifactId="log4j"/>
<!-- cassandra has a hard dependency on log4j, so force slf4j's log4j provider at runtime -->
<dependency groupId="org.slf4j" artifactId="slf4j-log4j12" scope="runtime"/>
<dependency groupId="org.apache.thrift" artifactId="libthrift"/>
<dependency groupId="org.apache.cassandra" artifactId="cassandra-thrift"/>
<!-- don't need hadoop classes to run, but if you use the hadoop stuff -->
<dependency groupId="org.apache.hadoop" artifactId="hadoop-core" optional="true"/>
<dependency groupId="org.apache.hadoop" artifactId="hadoop-minicluster" optional="true"/>
<dependency groupId="org.apache.pig" artifactId="pig" optional="true"/>
<!-- don't need jna to run, but nice to have -->
<dependency groupId="net.java.dev.jna" artifactId="jna" optional="true"/>
<!-- don't need jamm unless running a server in which case it needs to be a -javagent to be used anyway -->
<dependency groupId="com.github.stephenc" artifactId="jamm"/>
<dependency groupId="io.netty" artifactId="netty"/>
</artifact:pom>
<artifact:pom id="thrift-pom"
artifactId="cassandra-thrift"
url="http://cassandra.apache.org"
name="Apache Cassandra">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
<dependency groupId="commons-lang" artifactId="commons-lang"/>
<dependency groupId="org.slf4j" artifactId="slf4j-api"/>
<dependency groupId="org.apache.thrift" artifactId="libthrift"/>
</artifact:pom>
<artifact:pom id="clientutil-pom"
artifactId="cassandra-clientutil"
url="http://cassandra.apache.org"
name="Apache Cassandra">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
<dependency groupId="com.google.guava" artifactId="guava"/>
</artifact:pom>
<artifact:pom id="dist-pom"
artifactId="apache-cassandra"
packaging="pom"
url="http://cassandra.apache.org"
name="Apache Cassandra">
<parent groupId="org.apache.cassandra"
artifactId="cassandra-parent"
version="${version}"/>
<scm connection="${scm.connection}" developerConnection="${scm.developerConnection}" url="${scm.url}"/>
</artifact:pom>
</target>
<target name="maven-ant-tasks-retrieve-build" depends="maven-declare-dependencies">
<artifact:dependencies pomRefId="build-deps-pom"
filesetId="build-dependency-jars"
sourcesFilesetId="build-dependency-sources"
cacheDependencyRefs="true"
dependencyRefsBuildFile="${build.dir}/build-dependencies.xml">
<remoteRepository refid="central"/>
<remoteRepository refid="apache"/>
<remoteRepository refid="java.net2"/>
</artifact:dependencies>
<artifact:dependencies pomRefId="coverage-deps-pom"
pathId="cobertura.classpath">
<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 pomRefId="test-deps-pom"
filesetId="test-dependency-jars"
sourcesFilesetId="test-dependency-sources"
cacheDependencyRefs="true"
dependencyRefsBuildFile="${build.dir}/test-dependencies.xml">
<remoteRepository refid="apache"/>
<remoteRepository refid="central"/>
<remoteRepository refid="jclouds"/>
<remoteRepository refid="oauth"/>
</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="avroINProtoUpToDate" srcfile="${avro.src}/internode.genavro"
targetfile="${build.dir}/internode.avpr" />
</target>
<target name="avro-generate"
depends="avro-interface-generate-internode"
description="Generates Java Avro classes for client and internal use." />
<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>
<exec executable="thrift" dir="${basedir}/interface" failonerror="true">
<arg line="--gen py:twisted" />
<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>
<target name="test-run" depends="build"
description="Run in test mode. Not for production use!">
<java classname="org.apache.cassandra.service.CassandraDaemon" fork="true">
<classpath>
<path refid="cassandra.classpath"/>
<pathelement location="${test.conf}"/>
</classpath>
<jvmarg value="-Dstorage-config=${test.conf}"/>
<jvmarg value="-javaagent:${basedir}/lib/jamm-0.2.5.jar" />
<jvmarg value="-ea"/>
</java>
</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,gen-cql2-grammar,gen-cql3-grammar"
name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<!-- Order matters! -->
<javac debug="true" debuglevel="${debuglevel}"
destdir="${build.classes.thrift}" includeantruntime="false" source="${source.version}" target="${target.version}">
<src path="${interface.thrift.dir}/gen-java"/>
<classpath refid="cassandra.classpath"/>
</javac>
<javac debug="true" debuglevel="${debuglevel}"
destdir="${build.classes.main}" includeantruntime="false" source="${source.version}" target="${target.version}">
<src path="${build.src.java}"/>
<src path="${build.src.gen-java}"/>
<classpath refid="cassandra.classpath"/>
</javac>
<copy todir="${build.classes.main}">
<fileset dir="${build.src.resources}" />
</copy>
<taskdef name="paranamer" classname="com.thoughtworks.paranamer.ant.ParanamerGeneratorTask">
<classpath refid="cassandra.classpath" />
</taskdef>
<antcall target="createVersionPropFile"/>
</target>
<!-- Stress build file -->
<property name="stress.build.src" value="${basedir}/tools/stress/src" />
<property name="stress.build.classes" value="${build.classes}/stress" />
<property name="stress.manifest" value="${stress.build.classes}/MANIFEST.MF" />
<path id="cassandra.classes">
<pathelement location="${basedir}/build/classes/main" />
<pathelement location="${basedir}/build/classes/thrift" />
</path>
<target name="stress-build" depends="build">
<mkdir dir="${stress.build.classes}" />
<javac debug="true" debuglevel="${debuglevel}" destdir="${stress.build.classes}" includeantruntime="true" source="${source.version}" target="${target.version}">
<src path="${stress.build.src}" />
<classpath>
<path refid="cassandra.classes" />
<path>
<fileset dir="${build.lib}">
<include name="**/*.jar" />
</fileset>
</path>
</classpath>
</javac>
</target>
<!--
The jar target makes cassandra.jar output.
-->
<target name="jar"
depends="maven-declare-dependencies,build, build-test, stress-build"
description="Assemble Cassandra JAR files">
<mkdir dir="${build.classes.main}/META-INF" />
<mkdir dir="${build.classes.thrift}/META-INF" />
<copy file="LICENSE.txt"
tofile="${build.classes.main}/META-INF/LICENSE.txt"/>
<copy file="LICENSE.txt"
tofile="${build.classes.thrift}/META-INF/LICENSE.txt"/>
<copy file="NOTICE.txt"
tofile="${build.classes.main}/META-INF/NOTICE.txt"/>
<copy file="NOTICE.txt"
tofile="${build.classes.thrift}/META-INF/NOTICE.txt"/>
<artifact:writepom pomRefId="parent-pom" file="${build.dir}/${final.name}-parent.pom"/>
<!-- Thrift Jar -->
<artifact:writepom pomRefId="thrift-pom"
file="${build.dir}/${ant.project.name}-thrift-${version}.pom"/>
<jar jarfile="${build.dir}/${ant.project.name}-thrift-${version}.jar"
basedir="${build.classes.thrift}">
<fileset dir="${build.classes.main}">
<include name="org/apache/cassandra/thrift/ITransportFactory.class" />
<include name="org/apache/cassandra/thrift/TFramedTransportFactory.class" />
</fileset>
<manifest>
<attribute name="Implementation-Title" value="Cassandra"/>
<attribute name="Implementation-Version" value="${version}"/>
<attribute name="Implementation-Vendor" value="Apache"/>
</manifest>
</jar>
<!-- Main Jar -->
<artifact:writepom pomRefId="all-pom"
file="${build.dir}/${final.name}.pom"/>
<jar jarfile="${build.dir}/${final.name}.jar"
basedir="${build.classes.main}">
<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"/>
<attribute name="Class-Path"
value="${ant.project.name}-clientutil-${version}.jar ${ant.project.name}-thrift-${version}.jar" />
<!-- </section> -->
</manifest>
</jar>
<!-- Clientutil Jar -->
<!-- TODO: write maven pom here -->
<artifact:writepom pomRefId="clientutil-pom"
file="${build.dir}/${ant.project.name}-clientutil-${version}.pom"/>
<jar jarfile="${build.dir}/${ant.project.name}-clientutil-${version}.jar">
<fileset dir="${build.classes.main}">
<include name="org/apache/cassandra/cql/jdbc/*" />
<include name="org/apache/cassandra/utils/ByteBufferUtil*.class" />
<include name="org/apache/cassandra/utils/Hex.class" />
<include name="org/apache/cassandra/utils/UUIDGen*.class" />
</fileset>
<manifest>
<attribute name="Implementation-Title" value="Cassandra"/>
<attribute name="Implementation-Version" value="${version}"/>
<attribute name="Implementation-Vendor" value="Apache"/>
</manifest>
</jar>
<!-- Stress jar -->
<manifest file="${stress.manifest}">
<attribute name="Built-By" value="Pavel Yaskevich"/>
<attribute name="Main-Class" value="org.apache.cassandra.stress.Stress"/>
</manifest>
<mkdir dir="${stress.build.classes}/META-INF" />
<mkdir dir="${build.dir}/tools/lib/" />
<jar destfile="${build.dir}/tools/lib/stress.jar" manifest="${stress.manifest}">
<fileset dir="${stress.build.classes}"/>
</jar>
</target>
<!--
The javadoc-jar target makes cassandra-javadoc.jar output required for publishing to Maven central repository.
-->
<target name="javadoc-jar" description="Assemble Cassandra JavaDoc JAR file">
<mkdir dir="${javadoc.jars.dir}"/>
<create-javadoc destdir="${javadoc.jars.dir}/thrift">
<filesets>
<fileset dir="${interface.thrift.dir}/gen-java" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</filesets>
</create-javadoc>
<jar jarfile="${build.dir}/${ant.project.name}-thrift-${version}-javadoc.jar"
basedir="${javadoc.jars.dir}/thrift"/>
<create-javadoc destdir="${javadoc.jars.dir}/main">
<filesets>
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
<fileset dir="${build.src.gen-java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</filesets>
</create-javadoc>
<jar jarfile="${build.dir}/${final.name}-javadoc.jar"
basedir="${javadoc.jars.dir}/main"/>
<create-javadoc destdir="${javadoc.jars.dir}/clientutil">
<filesets>
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/cassandra/cql/jdbc/*" />
<include name="org/apache/cassandra/utils/ByteBufferUtil*.java" />
<include name="org/apache/cassandra/utils/Hex.java" />
<include name="org/apache/cassandra/utils/UUIDGen*.java" />
</fileset>
</filesets>
</create-javadoc>
<jar jarfile="${build.dir}/${ant.project.name}-clientutil-${version}-javadoc.jar"
basedir="${javadoc.jars.dir}/clientutil"/>
<!-- javadoc task always rebuilds so might as well remove the generated docs to prevent
being pulled into the distribution by accident -->
<delete quiet="true" dir="${javadoc.jars.dir}"/>
</target>
<!--
The sources-jar target makes cassandra-sources.jar output required for publishing to Maven central repository.
-->
<target name="sources-jar" depends="init,avro-generate" description="Assemble Cassandra Sources JAR file">
<jar jarfile="${build.dir}/${ant.project.name}-thrift-${version}-sources.jar">
<fileset dir="${interface.thrift.dir}/gen-java" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</jar>
<jar jarfile="${build.dir}/${final.name}-sources.jar">
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
<fileset dir="${build.src.gen-java}" defaultexcludes="yes">
<include name="org/apache/**/*.java"/>
</fileset>
</jar>
<jar jarfile="${build.dir}/${ant.project.name}-clientutil-${version}-sources.jar">
<fileset dir="${build.src.java}" defaultexcludes="yes">
<include name="org/apache/cassandra/cql/jdbc/*" />
<include name="org/apache/cassandra/utils/ByteBufferUtil*.java" />
<include name="org/apache/cassandra/utils/Hex.java" />
<include name="org/apache/cassandra/utils/UUIDGen*.java" />
</fileset>
</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" />
<include name="${ant.project.name}-thrift-${version}.jar" />
<include name="${ant.project.name}-clientutil-${version}.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" />
</fileset>
</copy>
<copy todir="${dist.dir}/pylib">
<fileset dir="pylib">
<include name="**" />
<exclude name="**/*.pyc" />
</fileset>
</copy>
<copy todir="${dist.dir}/">
<fileset dir="${basedir}">
<include name="*.txt" />
</fileset>
</copy>
<copy todir="${dist.dir}/tools/bin">
<fileset dir="${basedir}/tools/bin"/>
</copy>
<copy todir="${dist.dir}/tools/lib">
<fileset dir="${build.dir}/tools/lib/">
<include name="*.jar" />
</fileset>
</copy>
<artifact:writepom pomRefId="dist-pom"
file="${build.dir}/${final.name}-dist.pom"/>
<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/*"/>
<include name="tools/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=".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 forceOverwrite="yes" todir="${build.dir}" fileext=".md5"
algorithm="MD5">
<fileset dir="${build.dir}">
<include name="*.tar.gz" />
</fileset>
</checksum>
<checksum forceOverwrite="yes" todir="${build.dir}" fileext=".sha"
algorithm="SHA">
<fileset dir="${build.dir}">
<include name="*.tar.gz" />
</fileset>
</checksum>
<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}"
includeantruntime="false"
source="${source.version}"
target="${target.version}">
<classpath>
<path refid="cassandra.classpath"/>
</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>
<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"/>
<attribute name="exclude" default="" />
<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="-Dlog4j.configuration=log4j-junit.properties" />
<jvmarg value="-Djava.awt.headless=true"/>
<jvmarg value="-javaagent:${basedir}/lib/jamm-0.2.5.jar" />
<jvmarg value="-ea"/>
<jvmarg value="-Xss256k"/>
<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}" excludes="@{exclude}"/>
</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>
<!--
This test target is a bit different. It's purpose is to exercise the
clientutil jar in order to expose any new dependencies. For that
reason we use the classes from the jar, and a carefully constructed
classpath which only contains what we expect users to need.
-->
<target name="test-clientutil-jar" depends="build-test,jar" description="Test clientutil jar">
<junit>
<test name="org.apache.cassandra.cql.jdbc.ClientUtilsTest" />
<formatter type="brief" usefile="false" />
<classpath>
<pathelement location="${test.classes}" />
<pathelement location="${build.dir}/${ant.project.name}-clientutil-${version}.jar" />
<fileset dir="${build.dir.lib}">
<include name="**/junit*.jar" />
</fileset>
</classpath>
</junit>
</target>
<target name="test" depends="build-test" description="Execute unit tests" >
<testmacro suitename="unit" inputdir="${test.unit.src}" exclude="**/pig/*.java" timeout="${test.timeout}">
<jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/>
<jvmarg value="-Dcorrupt-sstable-root=${test.data}/corrupt-sstables"/>
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
</testmacro>
</target>
<target name="testsome" depends="build-test" description="Execute specific unit tests" >
<testmacro suitename="unit" inputdir="${test.unit.src}" exclude="**/pig/*.java" timeout="${test.timeout}">
<test name="${test.name}" methods="${test.methods}"/>
<jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/>
<jvmarg value="-Dcorrupt-sstable-root=${test.data}/corrupt-sstables"/>
<jvmarg value="-Dmigration-sstable-root=${test.data}/migration-sstables"/>
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
</testmacro>
</target>
<target name="test-compression" depends="build-test" description="Execute unit tests with sstable compression enabled">
<testmacro suitename="unit" inputdir="${test.unit.src}" exclude="**/pig/*.java" timeout="${test.timeout}">
<jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/>
<jvmarg value="-Dcorrupt-sstable-root=${test.data}/corrupt-sstables"/>
<jvmarg value="-Dcassandra.test.compression=true"/>
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
</testmacro>
</target>
<target name="msg-ser-gen-test" depends="build-test" description="Generates message serializations">
<testmacro suitename="unit" inputdir="${test.unit.src}"
timeout="${test.timeout}" 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="${test.timeout}"
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="${test.timeout}" filter="**/SerializationsTest.java">
<jvmarg value="-Dcassandra.version=0.7"/>
</testmacro>
</target>
<target name="msg-ser-test-10" depends="build-test" description="Tests message serializations on 1.0 messages">
<testmacro suitename="unit" inputdir="${test.unit.src}"
timeout="${test.timeout}" filter="**/SerializationsTest.java">
<jvmarg value="-Dcassandra.version=1.0"/>
</testmacro>
</target>
<target name="pbs-test" depends="build-test" description="Tests PBS predictor">
<testmacro suitename="unit" inputdir="${test.unit.src}"
timeout="15000" filter="**/PBSPredictorTest.java"/>
</target>
<target name="long-test" depends="build-test" description="Execute functional tests">
<testmacro suitename="long" inputdir="${test.long.src}"
timeout="${test.long.timeout}">
<jvmarg value="-Dcassandra.ring_delay_ms=1000"/>
<jvmarg value="-Dcassandra.tolerate_sstable_size=true"/>
</testmacro>
</target>
<target name="pig-test" depends="build-test" description="Excute Pig tests">
<testmacro suitename="unit" inputdir="${test.unit.src}"
timeout="1200000" filter="**/pig/*Test.java">
</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.main}">
<include name="**/*.class"/>
<exclude name="**/*Test.class"/>
<exclude name="**/*TestCase.class"/>
<exclude name="**/test/*.class"/>
<!-- cobertura modifies the serialVersionUID of classes. Some of our unit tests rely on backward
wire compatability of these classes. It was easier to exlude them from instrumentation than to
force their serialVersinUIDs. -->
<exclude name="**/*Token.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">
<create-javadoc destdir="${javadoc.dir}">
<filesets>
<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>
</filesets>
</create-javadoc>
</target>
<!-- Generate Eclipse project description files -->
<target name="generate-eclipse-files" depends="build" description="Generate eclipse files">
<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.jdt.core.javabuilder</name>
</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/thrift/gen-java"/>
<classpathentry kind="src" path="test/unit"/>
<classpathentry kind="src" path="test/long"/>
<classpathentry kind="src" path="tools/stress/src"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="output" path="build/classes/main"/>
<classpathentry kind="lib" path="build/classes/thrift"/>
<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(project.getProperty("path.separator"));
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" />
</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>
<!-- Publish artifacts to Maven repositories -->
<target name="mvn-install"
depends="maven-declare-dependencies,artifacts,jar,sources-jar,javadoc-jar"
description="Installs the artifacts in the Maven Local Repository">
<!-- the parent -->
<install pomFile="${build.dir}/${final.name}-parent.pom"
file="${build.dir}/${final.name}-parent.pom"
packaging="pom"/>
<!-- the distribution -->
<install pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-dist.pom"
packaging="pom"/>
<install pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-bin.tar.gz"
packaging="tar.gz"
classifier="bin"/>
<install pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-src.tar.gz"
packaging="tar.gz"
classifier="src"/>
<!-- the cassandra-thrift jar -->
<install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}.jar"/>
<install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}-sources.jar"
classifier="sources"/>
<install pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}-javadoc.jar"
classifier="javadoc"/>
<!-- the cassandra-clientutil jar -->
<install pomFile="${build.dir}/${ant.project.name}-clientutil-${version}.pom"
file="${build.dir}/${ant.project.name}-clientutil-${version}.jar"/>
<install pomFile="${build.dir}/${ant.project.name}-clientutil-${version}.pom"
file="${build.dir}/${ant.project.name}-clientutil-${version}-sources.jar"
classifier="sources"/>
<install pomFile="${build.dir}/${ant.project.name}-clientutil-${version}.pom"
file="${build.dir}/${ant.project.name}-clientutil-${version}-javadoc.jar"
classifier="javadoc"/>
<!-- the cassandra-all jar -->
<install pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}.jar"/>
<install pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}-sources.jar"
classifier="sources"/>
<install pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}-javadoc.jar"
classifier="javadoc"/>
</target>
<target name="publish"
depends="mvn-install"
if="release"
description="Publishes the artifacts to the Maven repository">
<!-- the parent -->
<deploy pomFile="${build.dir}/${final.name}-parent.pom"
file="${build.dir}/${final.name}-parent.pom"
packaging="pom"/>
<!-- the distribution -->
<deploy pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-dist.pom"
packaging="pom"/>
<deploy pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-bin.tar.gz"
packaging="tar.gz"
classifier="bin"/>
<deploy pomFile="${build.dir}/${final.name}-dist.pom"
file="${build.dir}/${final.name}-src.tar.gz"
packaging="tar.gz"
classifier="src"/>
<!-- the cassandra-thrift jar -->
<deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}.jar"/>
<deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}-sources.jar"
classifier="sources"/>
<deploy pomFile="${build.dir}/${ant.project.name}-thrift-${version}.pom"
file="${build.dir}/${ant.project.name}-thrift-${version}-javadoc.jar"
classifier="javadoc"/>
<!-- the cassandra-clientutil jar -->
<deploy pomFile="${build.dir}/${ant.project.name}-clientutil-${version}.pom"
file="${build.dir}/${ant.project.name}-clientutil-${version}.jar"/>
<deploy pomFile="${build.dir}/${ant.project.name}-clientutil-${version}.pom"
file="${build.dir}/${ant.project.name}-clientutil-${version}-sources.jar"
classifier="sources"/>
<deploy pomFile="${build.dir}/${ant.project.name}-clientutil-${version}.pom"
file="${build.dir}/${ant.project.name}-clientutil-${version}-javadoc.jar"
classifier="javadoc"/>
<!-- the cassandra-all jar -->
<deploy pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}.jar"/>
<deploy pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}-sources.jar"
classifier="sources"/>
<deploy pomFile="${build.dir}/${final.name}.pom"
file="${build.dir}/${final.name}-javadoc.jar"
classifier="javadoc"/>
</target>
</project>