| <!-- |
| 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="check" name="apache-cassandra" |
| xmlns:if="ant:if" |
| xmlns:unless="ant:unless"> |
| |
| <fail message="You need to use Ant of version at least 1.10 to continue."> |
| <condition> |
| <not> |
| <antversion atleast="1.10"/> |
| </not> |
| </condition> |
| </fail> |
| |
| <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="5.0-alpha2"/> |
| <property name="scm.connection" value="scm:https://gitbox.apache.org/repos/asf/cassandra.git"/> |
| <property name="scm.developerConnection" value="scm:https://gitbox.apache.org/repos/asf/cassandra.git"/> |
| <property name="scm.url" value="https://gitbox.apache.org/repos/asf?p=cassandra.git;a=tree"/> |
| |
| <!-- JDKs supported. |
| All releases are built with the default JDK. |
| Builds with non-default JDKs are considered experimental and for development and testing purposes. |
| When building, javac's source and target flags are set to the jdk used, so lower JDKs are not supported at runtime. |
| The use of both CASSANDRA_USE_JDK11 and use-jdk11 is deprecated. |
| --> |
| <property name="java.default" value="11" /> |
| <property name="java.supported" value="11,17" /> |
| |
| <!-- directory details --> |
| <property name="basedir" value="."/> |
| <property name="build.helpers.dir" value="${basedir}/.build"/> |
| <property name="build.src" value="${basedir}/src"/> |
| <property name="build.src.java" value="${basedir}/src/java"/> |
| <property name="build.src.antlr" value="${basedir}/src/antlr"/> |
| <property name="build.src.resources" value="${basedir}/src/resources"/> |
| <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="${build.dir}/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="javadoc.dir" value="${build.dir}/javadoc"/> |
| <property name="interface.dir" value="${basedir}/interface"/> |
| <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.classlistfile" value="testlist.txt"/> |
| <property name="test.classlistprefix" value="unit"/> |
| <property name="benchmark.name" value=""/> |
| <property name="jmh.args" value=""/> |
| <property name="test.methods" value=""/> |
| <property name="test.anttasks.src" value="${test.dir}/anttasks"/> |
| <property name="test.unit.src" value="${test.dir}/unit"/> |
| <property name="test.long.src" value="${test.dir}/long"/> |
| <property name="test.burn.src" value="${test.dir}/burn"/> |
| <property name="test.memory.src" value="${test.dir}/memory"/> |
| <property name="test.microbench.src" value="${test.dir}/microbench"/> |
| <property name="test.distributed.src" value="${test.dir}/distributed"/> |
| <property name="test.compression.algo" value="LZ4"/> |
| <property name="test.simulator.src" value="${test.dir}/simulator/main"/> |
| <property name="test.simulator-asm.src" value="${test.dir}/simulator/asm"/> |
| <property name="test.simulator-bootstrap.src" value="${test.dir}/simulator/bootstrap"/> |
| <property name="test.simulator-test.src" value="${test.dir}/simulator/test"/> |
| <property name="test.driver.connection_timeout_ms" value="10000"/> |
| <property name="test.driver.read_timeout_ms" value="24000"/> |
| <property name="test.jvm.args" value="" /> |
| <property name="testtag.extra" value="" /> |
| <property name="dist.dir" value="${build.dir}/dist"/> |
| |
| <!-- Use build/tmp for temp files if not otherwise specified. Because Ant properties are immutable, this has no effect if |
| the user specifies the tmp.dir property --> |
| <property name="tmp.dir" value="${build.dir}/tmp"/> |
| |
| <property name="doc.dir" value="${basedir}/doc"/> |
| |
| <condition property="version" value="${base.version}"> |
| <isset property="release"/> |
| </condition> |
| <property name="version" value="${base.version}-SNAPSHOT"/> |
| <property name="version.properties.dir" |
| value="${build.src.resources}/org/apache/cassandra/config/" /> |
| <property name="final.name" value="${ant.project.name}-${version}"/> |
| |
| <property name="local.repository" value="${user.home}/.m2/repository" /> |
| |
| <!-- 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="480000" /> |
| <property name="test.memory.timeout" value="480000" /> |
| <property name="test.long.timeout" value="600000" /> |
| <property name="test.burn.timeout" value="60000000" /> |
| <property name="test.distributed.timeout" value="900000" /> |
| <property name="test.simulation.timeout" value="1800000" /> |
| |
| <!-- default for cql tests. Can be overridden by -Dcassandra.test.use_prepared=false --> |
| <property name="cassandra.test.use_prepared" value="true" /> |
| |
| <!-- The number of active processors seen by JVM --> |
| <property name="cassandra.test.processorCount" value="2"/> |
| |
| <!-- skip flushing schema tables during tests --> |
| <property name="cassandra.test.flush_local_schema_changes" value="false" /> |
| |
| <!-- fast shutdown of messaging service --> |
| <property name="cassandra.test.messagingService.nonGracefulShutdown" value="true"/> |
| |
| <!-- https://www.eclemma.org/jacoco/ --> |
| <property name="jacoco.version" value="0.8.8"/> |
| <property name="jacoco.export.dir" value="${build.dir}/jacoco/" /> |
| <property name="jacoco.partials.dir" value="${jacoco.export.dir}/partials" /> |
| <property name="jacoco.partialexecfile" value="${jacoco.partials.dir}/partial.exec" /> |
| <property name="jacoco.finalexecfile" value="${jacoco.export.dir}/jacoco.exec" /> |
| |
| <condition property="isMac" value="true"> |
| <os family="mac"/> |
| </condition> |
| <condition property="isLinux" value="true"> |
| <and> |
| <os family="unix"/> |
| <not> |
| <os family="mac"/> |
| </not> |
| </and> |
| </condition> |
| |
| <property name="jflex.version" value="1.8.2"/> |
| <property name="jamm.version" value="0.4.0"/> |
| <property name="ecj.version" value="3.33.0"/> |
| <!-- When updating ASM, please, do consider whether you might need to update also FBUtilities#ASM_BYTECODE_VERSION |
| and the simulator InterceptClasses#BYTECODE_VERSION, in particular if we are looking to provide Cassandra support |
| for newer JDKs (CASSANDRA-17873). --> |
| <property name="asm.version" value="9.4"/> |
| <property name="allocation-instrumenter.version" value="3.1.0"/> |
| |
| <condition property="is.source.artifact"> |
| <available file="${build.src.java}" type="dir" /> |
| </condition> |
| |
| <condition property="cassandra.use_nix_recursive_delete" value="false" else="true"> |
| <os family="windows" /> |
| </condition> |
| |
| <!-- Check if all tests are being run or just one (check testclasslist target). If it's all tests don't spam the |
| console with test output. |
| If it's an individual test print the output from the test under the assumption someone is debugging the test |
| and wants to know what is going on without having to context switch to the log file that is generated. |
| Debug level output still needs to be retrieved from the log file. --> |
| <macrodef name="set-keepbrief-property"> |
| <attribute name="test-name" /> |
| <sequential> |
| <condition property="cassandra.keepBriefBrief" value="false" else="true"> |
| <not> |
| <equals arg1="@{test-name}" arg2="*Test"/> |
| </not> |
| </condition> |
| </sequential> |
| </macrodef> |
| <set-keepbrief-property test-name="${test.name}" /> |
| |
| <fail message="Unsupported JDK version used: ${ant.java.version}"> |
| <condition><not><contains string="${java.supported}" substring="${ant.java.version}"/></not></condition> |
| </fail> |
| <condition property="is.java.default"><equals arg1="${ant.java.version}" arg2="${java.default}"/></condition> |
| <echo unless:true="${is.java.default}" message="Non default JDK version used: ${ant.java.version}"/> |
| |
| <condition property="arch_x86"> |
| <equals arg1="${os.arch}" arg2="x86" /> |
| </condition> |
| <!-- On non-X86 JDK 8 (such as M1 Mac) the smallest allowed Xss is 384k; so need a larger value |
| when on these platforms. --> |
| <condition property="jvm_xss" value="-Xss256k" else="-Xss384k"> |
| <isset property="arch_x86" /> |
| </condition> |
| |
| <resources id="_jvm11_arg_items"> |
| <string>-Djdk.attach.allowAttachSelf=true</string> |
| <string>-XX:+UseConcMarkSweepGC</string> |
| <string>-XX:+CMSParallelRemarkEnabled</string> |
| <string>-XX:SurvivorRatio=8</string> |
| <string>-XX:MaxTenuringThreshold=1</string> |
| <string>-XX:CMSInitiatingOccupancyFraction=75</string> |
| <string>-XX:+UseCMSInitiatingOccupancyOnly</string> |
| <string>-XX:CMSWaitDuration=10000</string> |
| <string>-XX:+CMSParallelInitialMarkEnabled</string> |
| <string>-XX:+CMSEdenChunksRecordAlways</string> |
| |
| |
| <string>--add-exports java.base/jdk.internal.misc=ALL-UNNAMED</string> |
| <string>--add-exports java.base/jdk.internal.ref=ALL-UNNAMED</string> |
| <string>--add-exports java.base/sun.nio.ch=ALL-UNNAMED</string> |
| <string>--add-exports java.management.rmi/com.sun.jmx.remote.internal.rmi=ALL-UNNAMED</string> |
| <string>--add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED</string> |
| <string>--add-exports java.rmi/sun.rmi.server=ALL-UNNAMED</string> |
| <string>--add-exports java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED</string> |
| <string>--add-exports java.sql/java.sql=ALL-UNNAMED</string> |
| |
| <string>--add-opens java.base/java.lang.module=ALL-UNNAMED</string> |
| <string>--add-opens java.base/java.net=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.loader=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.ref=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.reflect=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.math=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.module=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.util.jar=ALL-UNNAMED</string> |
| <string>--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED</string> |
| </resources> |
| <pathconvert property="_jvm11_args_concat" refid="_jvm11_arg_items" pathsep=" "/> |
| <condition property="java-jvmargs" value="${_jvm11_args_concat}"> |
| <equals arg1="${ant.java.version}" arg2="11"/> |
| </condition> |
| |
| <resources id="_jvm17_arg_items"> |
| <string>-Djdk.attach.allowAttachSelf=true</string> |
| <string>-XX:+UseG1GC</string> |
| <string>-XX:+ParallelRefProcEnabled</string> |
| <string>-XX:MaxTenuringThreshold=1</string> |
| <string>-XX:G1HeapRegionSize=16m</string> |
| |
| <string>--add-exports java.base/jdk.internal.misc=ALL-UNNAMED</string> |
| <string>--add-exports java.management.rmi/com.sun.jmx.remote.internal.rmi=ALL-UNNAMED</string> |
| <string>--add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED</string> |
| <string>--add-exports java.rmi/sun.rmi.server=ALL-UNNAMED</string> |
| <string>--add-exports java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED</string> |
| <string>--add-exports java.sql/java.sql=ALL-UNNAMED</string> |
| <string>--add-exports java.base/java.lang.ref=ALL-UNNAMED</string> |
| <string>--add-exports jdk.unsupported/sun.misc=ALL-UNNAMED</string> |
| <string>--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED</string> |
| <string>--add-exports jdk.attach/sun.tools.attach=ALL-UNNAMED</string> |
| |
| <string>--add-opens java.base/java.lang.module=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.loader=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.ref=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.reflect=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.math=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.module=ALL-UNNAMED</string> |
| <string>--add-opens java.base/jdk.internal.util.jar=ALL-UNNAMED</string> |
| <string>--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED</string> |
| <string>--add-opens java.base/sun.nio.ch=ALL-UNNAMED</string> |
| <string>--add-opens java.base/java.io=ALL-UNNAMED</string> |
| <string>--add-opens java.base/java.lang.reflect=ALL-UNNAMED</string> |
| <string>--add-opens jdk.compiler/com.sun.tools.javac=ALL-UNNAMED</string> |
| <string>--add-opens java.base/java.lang=ALL-UNNAMED</string> |
| <string>--add-opens java.base/java.util=ALL-UNNAMED</string> |
| <string>--add-opens java.base/java.nio=ALL-UNNAMED</string> |
| |
| <string>--add-opens java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED</string> |
| </resources> |
| <pathconvert property="_jvm17_args_concat" refid="_jvm17_arg_items" pathsep=" "/> |
| <condition property="java-jvmargs" value="${_jvm17_args_concat}"> |
| <equals arg1="${ant.java.version}" arg2="17"/> |
| </condition> |
| |
| <!-- |
| JVM arguments for tests. |
| |
| There is a race condition bug in java 11 (see CASSANDRA-15981) which causes a crash of the |
| JVM; this race is between CMS and class unloading. In java 8 we can cap the metaspace to |
| make tests stable on low resource environments, but in java 11 we need to make it unlimited |
| (don't define MaxMetaspaceSize) and disable class unloading in CMS outside of a |
| stop-the-world pause. |
| |
| In java 11 we also need to set a system property to enable netty to use Unsafe direct byte |
| buffer construction (see CASSANDRA-16493) |
| --> |
| <resources id="_jvm11_test_arg_items"> |
| <string>-XX:-CMSClassUnloadingEnabled</string> |
| <string>-Dio.netty.tryReflectionSetAccessible=true</string> |
| </resources> |
| <pathconvert property="_jvm11_test_arg_items_concat" refid="_jvm11_test_arg_items" pathsep=" "/> |
| <resources id="_jvm17_test_arg_items"> |
| <string>-Dio.netty.tryReflectionSetAccessible=true</string> |
| </resources> |
| <pathconvert property="_jvm17_test_arg_items_concat" refid="_jvm17_test_arg_items" pathsep=" "/> |
| <condition property="_std-test-jvmargs" value="${_jvm11_test_arg_items_concat}"> |
| <equals arg1="${ant.java.version}" arg2="11"/> |
| </condition> |
| <condition property="_std-test-jvmargs" value="${_jvm17_test_arg_items_concat}"> |
| <equals arg1="${ant.java.version}" arg2="17"/> |
| </condition> |
| |
| <!-- needed to compile org.apache.cassandra.utils.JMXServerUtils --> |
| <!-- needed to compile org.apache.cassandra.distributed.impl.Instance--> |
| <!-- needed to compile org.apache.cassandra.utils.memory.BufferPool --> |
| <property name="jdk11plus-javac-exports" value="--add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED --add-exports java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED" /> |
| |
| <!-- |
| Add all the dependencies. |
| --> |
| <path id="cassandra.classpath"> |
| <pathelement location="${build.classes.main}" /> |
| <fileset dir="${build.dir.lib}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </path> |
| <path id="cassandra.classpath.test"> |
| <file file="${build.dir}/${final.name}.jar"/> <!-- we need the jar for tests and benchmarks (multi-version jar) --> |
| <fileset dir="${build.dir.lib}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <fileset dir="${test.lib}/jars"> |
| <include name="**/*.jar" /> |
| <exclude name="**/ant-*.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 &copy; 2009- The Apache Software Foundation" |
| useexternalfile="yes" encoding="UTF-8" failonerror="false" |
| maxmemory="256m" additionalparam="${jdk11plus-javac-exports}"> |
| <filesets/> |
| </javadoc> |
| <fail message="javadoc failed"> |
| <condition> |
| <not> |
| <available file="@{destdir}/index-all.html" /> |
| </not> |
| </condition> |
| </fail> |
| </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="${test.lib}"/> |
| <mkdir dir="${test.classes}"/> |
| <mkdir dir="${stress.test.classes}"/> |
| <mkdir dir="${fqltool.test.classes}"/> |
| <mkdir dir="${build.src.gen-java}"/> |
| <mkdir dir="${build.dir.lib}"/> |
| <mkdir dir="${jacoco.export.dir}"/> |
| <mkdir dir="${jacoco.partials.dir}"/> |
| |
| <!-- Set up jdk specific properties --> |
| <javac includes="**/JdkProperties.java,**/SetSystemProperty.java" srcdir="test/anttasks" destdir="${test.classes}" includeantruntime="true" source="${java.default}" target="${java.default}"> |
| <compilerarg value="-Xlint:-options"/> |
| </javac> |
| <taskdef name="JdkProperties" classname="org.apache.cassandra.anttasks.JdkProperties" classpath="${test.classes}"/> |
| <taskdef name="SetSystemProperty" classname="org.apache.cassandra.anttasks.SetSystemProperty" classpath="${test.classes}"/> |
| |
| <JdkProperties/> |
| |
| <!-- https://issues.apache.org/jira/browse/CASSANDRA-16391?focusedCommentId=17310803&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17310803 --> |
| <SetSystemProperty name="jmc5.path" value="/tmp"/> |
| <SetSystemProperty name="jmc6.path" value="/tmp"/> |
| <SetSystemProperty name="visualvm.path" value="/tmp"/> |
| </target> |
| |
| <target name="clean" description="Remove all locally created artifacts"> |
| <delete dir="${build.test.dir}" /> |
| <delete dir="${build.dir}/tmp" /> |
| <delete dir="${build.classes}" /> |
| <delete dir="${build.src.gen-java}" /> |
| <delete dir="${version.properties.dir}" /> |
| <delete dir="${jacoco.export.dir}" /> |
| <delete dir="${jacoco.partials.dir}"/> |
| </target> |
| <target depends="clean" name="cleanall"/> |
| |
| <target name="realclean" depends="clean" description="Remove the entire build directory and all downloaded artifacts"> |
| <delete> |
| <fileset dir="${build.lib}" excludes="cassandra-driver-internal-only-*,puresasl-internal-only-*"/> |
| </delete> |
| <delete dir="${build.dir}" /> |
| <delete dir="${doc.dir}/build" /> |
| <delete dir="${doc.dir}/source/tools/nodetool" /> |
| </target> |
| |
| <!-- |
| This generates the CQL grammar files from Cql.g |
| --> |
| <target name="check-gen-cql3-grammar"> |
| <uptodate property="cql3current" |
| targetfile="${build.src.gen-java}/org/apache/cassandra/cql3/Cql.tokens"> |
| <srcfiles dir="${build.src.antlr}"> |
| <include name="*.g"/> |
| </srcfiles> |
| </uptodate> |
| </target> |
| |
| <target name="gen-cql3-grammar" depends="check-gen-cql3-grammar" unless="cql3current"> |
| <echo>Building Grammar ${build.src.antlr}/Cql.g ...</echo> |
| <java classname="org.antlr.Tool" |
| classpathref="cql3-grammar.classpath" |
| failonerror="true"> |
| <arg value="-Xconversiontimeout" /> |
| <arg value="10000" /> |
| <arg value="${build.src.antlr}/Cql.g" /> |
| <arg value="-fo" /> |
| <arg value="${build.src.gen-java}/org/apache/cassandra/cql3/" /> |
| <arg value="-Xmaxinlinedfastates"/> |
| <arg value="10"/> <!-- default is 60 --> |
| </java> |
| </target> |
| |
| <target name="generate-cql-html" depends="resolver-init" description="Generate HTML from textile source"> |
| <taskdef classpathref="wikitext.classpath" resource="wikitexttasks.properties" /> |
| <wikitext-to-html markupLanguage="Textile"> |
| <fileset dir="${basedir}"> |
| <include name="doc/cql3/*.textile"/> |
| </fileset> |
| </wikitext-to-html> |
| </target> |
| |
| <target name="gen-asciidoc" description="Generate dynamic asciidoc pages" depends="jar" unless="ant.gen-doc.skip"> |
| <exec executable="make" osfamily="unix" dir="${doc.dir}"> |
| <arg value="gen-asciidoc"/> |
| </exec> |
| </target> |
| |
| <target name="gen-doc" description="Generate documentation" depends="gen-asciidoc,generate-cql-html" unless="ant.gen-doc.skip"> |
| <exec executable="make" osfamily="unix" dir="${doc.dir}"> |
| <arg value="html"/> |
| </exec> |
| </target> |
| |
| <!-- |
| Generates Java sources for tokenization support from jflex |
| grammar files |
| --> |
| <target name="generate-jflex-java" description="Generate Java from jflex grammar"> |
| <taskdef classname="jflex.anttask.JFlexTask" classpathref="jflex.classpath" name="jflex" /> |
| <jflex file="${build.src.java}/org/apache/cassandra/index/sasi/analyzer/StandardTokenizerImpl.jflex" destdir="${build.src.gen-java}/" /> |
| </target> |
| |
| <!-- create properties file with C version --> |
| <target name="_createVersionPropFile" depends="_get-git-sha,set-cqlsh-version"> |
| <taskdef name="propertyfile" classname="org.apache.tools.ant.taskdefs.optional.PropertyFile"/> |
| <mkdir dir="${version.properties.dir}"/> |
| <propertyfile file="${version.properties.dir}/version.properties"> |
| <entry key="CassandraVersion" value="${version}"/> |
| <entry key="GitSHA" value="${git.sha}"/> |
| </propertyfile> |
| </target> |
| |
| <target name="test-run" depends="jar" |
| description="Run in test mode. Not for production use!"> |
| <java classname="org.apache.cassandra.service.CassandraDaemon" fork="true"> |
| <classpath> |
| <path refid="cassandra.classpath.test"/> |
| <pathelement location="${test.conf}"/> |
| </classpath> |
| <jvmarg value="-Dstorage-config=${test.conf}"/> |
| <jvmarg value="-Dcassandra.reads.thresholds.coordinator.defensive_checks_enabled=true" /> <!-- enable defensive checks --> |
| <jvmarg value="-javaagent:${build.dir.lib}/jars/jamm-${jamm.version}.jar" /> |
| <jvmarg value="-ea"/> |
| <jvmarg line="${java-jvmargs}"/> |
| </java> |
| </target> |
| |
| <!-- |
| The build target builds all the .class files |
| --> |
| <target name="build" depends="resolver-retrieve-build,build-project" description="Compile Cassandra classes"/> |
| <target name="codecoverage" depends="jacoco-run,jacoco-report" description="Create code coverage report"/> |
| |
| <target name="_build_java"> |
| <!-- Note: we cannot use javac's 'release' option, as that does not allow accessing sun.misc.Unsafe nor |
| Nashorn's ClassFilter class as any javac modules option is invalid for release 8. --> |
| <echo message="Compiling for Java ${ant.java.version}..."/> |
| <javac |
| debug="true" debuglevel="${debuglevel}" encoding="utf-8" |
| destdir="${build.classes.main}" includeantruntime="false" source="${ant.java.version}" target="${ant.java.version}"> |
| <src path="${build.src.java}"/> |
| <src path="${build.src.gen-java}"/> |
| <compilerarg value="-XDignore.symbol.file"/> |
| <compilerarg line="${jdk11plus-javac-exports}"/> |
| <classpath> |
| <path refid="cassandra.classpath"/> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target depends="init,gen-cql3-grammar,generate-cql-html,generate-jflex-java" |
| name="build-project"> |
| <echo message="${ant.project.name}: ${ant.file}"/> |
| <!-- Order matters! --> |
| <antcall target="_build_java"/> |
| <antcall target="_createVersionPropFile"/> |
| <copy todir="${build.classes.main}"> |
| <fileset dir="${build.src.resources}" /> |
| </copy> |
| <copy todir="${basedir}/conf" file="${build.classes.main}/META-INF/hotspot_compiler"/> |
| </target> |
| |
| <target name="check" depends="_main-jar,build-test" description="Verifies the source code and dependencies. This task is intended to run on pre-commit and locally. It should verify mostly modified files compared to the upstream base branch." unless="check.skip"> |
| <antcall target="rat-check" inheritrefs="true"/> |
| <antcall target="checkstyle" inheritrefs="true"/> |
| <antcall target="checkstyle-test" inheritrefs="true"/> |
| </target> |
| |
| <!-- Stress build file --> |
| <property name="stress.build.src" value="${basedir}/tools/stress/src" /> |
| <property name="stress.test.src" value="${basedir}/tools/stress/test/unit" /> |
| <property name="stress.build.classes" value="${build.classes}/stress" /> |
| <property name="stress.test.classes" value="${build.dir}/test/stress-classes" /> |
| <property name="stress.manifest" value="${stress.build.classes}/MANIFEST.MF" /> |
| |
| <target name="stress-build-test" depends="stress-build" description="Compile stress tests"> |
| <javac debug="true" debuglevel="${debuglevel}" destdir="${stress.test.classes}" |
| source="${ant.java.version}" target="${ant.java.version}" |
| includeantruntime="false" encoding="utf-8"> |
| <classpath> |
| <path refid="cassandra.classpath.test"/> |
| <pathelement location="${stress.build.classes}" /> |
| </classpath> |
| <src path="${stress.test.src}"/> |
| </javac> |
| </target> |
| |
| <target name="stress-build" depends="build" description="build stress tool"> |
| <antcall target="_stress_build"/> |
| </target> |
| |
| <target name="_stress_build"> |
| <mkdir dir="${stress.build.classes}" /> |
| <javac compiler="modern" debug="true" debuglevel="${debuglevel}" |
| source="${ant.java.version}" target="${ant.java.version}" |
| encoding="utf-8" destdir="${stress.build.classes}" includeantruntime="true"> |
| <src path="${stress.build.src}" /> |
| <classpath> |
| <path refid="cassandra.classpath" /> |
| </classpath> |
| </javac> |
| <copy todir="${stress.build.classes}"> |
| <fileset dir="${stress.build.src}/resources" /> |
| </copy> |
| </target> |
| |
| <target name="stress-test" depends="maybe-build-test" description="Runs stress tests"> |
| <testmacro inputdir="${stress.test.src}" |
| timeout="${test.timeout}"> |
| </testmacro> |
| </target> |
| |
| <!-- Use this with an FQDN for test class, and an optional csv list of methods like this: |
| ant stress-test-some -Dtest.name=org.apache.cassandra.stress.generate.DistributionGaussianTest |
| ant stress-test-some -Dtest.name=org.apache.cassandra.stress.generate.DistributionGaussianTest -Dtest.methods=simpleGaussian |
| --> |
| <target name="stress-test-some" depends="maybe-build-test" description="Runs stress tests"> |
| <testmacro inputdir="${stress.test.src}" timeout="${test.timeout}"> |
| <test unless:blank="${test.methods}" name="${test.name}" methods="${test.methods}" todir="${build.test.dir}/output/" outfile="TEST-${test.name}-${test.methods}"/> |
| <test if:blank="${test.methods}" name="${test.name}" todir="${build.test.dir}/output/" outfile="TEST-${test.name}"/> |
| </testmacro> |
| </target> |
| |
| <!-- |
| fqltool build file |
| --> |
| <property name="fqltool.build.src" value="${basedir}/tools/fqltool/src" /> |
| <property name="fqltool.test.src" value="${basedir}/tools/fqltool/test/unit" /> |
| <property name="fqltool.build.classes" value="${build.classes}/fqltool" /> |
| <property name="fqltool.test.classes" value="${build.dir}/test/fqltool-classes" /> |
| <property name="fqltool.manifest" value="${fqltool.build.classes}/MANIFEST.MF" /> |
| |
| <target name="fqltool-build-test" depends="fqltool-build" description="Compile fqltool tests"> |
| <javac debug="true" debuglevel="${debuglevel}" destdir="${fqltool.test.classes}" |
| source="${ant.java.version}" target="${ant.java.version}" |
| includeantruntime="false" encoding="utf-8"> |
| <classpath> |
| <path refid="cassandra.classpath.test"/> |
| <pathelement location="${fqltool.build.classes}" /> |
| </classpath> |
| <src path="${fqltool.test.src}"/> |
| </javac> |
| </target> |
| |
| <target name="fqltool-build" depends="build" description="build fqltool"> |
| <antcall target="_fqltool_build"/> |
| </target> |
| |
| <target name="_fqltool_build"> |
| <mkdir dir="${fqltool.build.classes}" /> |
| <javac compiler="modern" debug="true" debuglevel="${debuglevel}" |
| source="${ant.java.version}" target="${ant.java.version}" |
| encoding="utf-8" destdir="${fqltool.build.classes}" includeantruntime="true"> |
| <src path="${fqltool.build.src}" /> |
| <classpath> |
| <path refid="cassandra.classpath" /> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="fqltool-test" depends="fqltool-build-test, maybe-build-test" description="Runs fqltool tests"> |
| <testmacro inputdir="${fqltool.test.src}" |
| timeout="${test.timeout}"> |
| </testmacro> |
| </target> |
| |
| <!-- |
| simulator asm build file |
| --> |
| <property name="simulator-asm.build.src" value="${test.simulator-asm.src}" /> |
| <property name="simulator-asm.build.classes" value="${build.classes}/simulator-asm" /> |
| <property name="simulator-asm.manifest" value="${simulator-asm.build.classes}/MANIFEST.MF" /> |
| |
| <property name="simulator-bootstrap.build.src" value="${test.simulator-bootstrap.src}" /> |
| <property name="simulator-bootstrap.build.classes" value="${build.classes}/simulator-bootstrap" /> |
| <property name="simulator-bootstrap.manifest" value="${simulator-bootstrap.build.classes}/MANIFEST.MF" /> |
| |
| <target name="simulator-asm-build" depends="build" description="build simulator-asm"> |
| <antcall target="_simulator-asm_build"/> |
| </target> |
| |
| <target name="simulator-bootstrap-build" depends="build" description="build simulator-bootstrap"> |
| <antcall target="_simulator-bootstrap_build"/> |
| </target> |
| |
| <target name="_simulator-asm_build"> |
| <mkdir dir="${simulator-asm.build.classes}" /> |
| <javac compiler="modern" debug="true" debuglevel="${debuglevel}" |
| source="${ant.java.version}" target="${ant.java.version}" |
| encoding="utf-8" destdir="${simulator-asm.build.classes}" includeantruntime="true"> |
| <src path="${simulator-asm.build.src}" /> |
| <classpath> |
| <fileset dir="${test.lib}"> |
| <include name="**/asm-*${asm.version}.jar" /> |
| </fileset> |
| <fileset dir="${build.lib}"> |
| <include name="**/asm-*${asm.version}.jar" /> |
| </fileset> |
| </classpath> |
| </javac> |
| </target> |
| |
| <target name="_simulator-bootstrap_build"> |
| <mkdir dir="${simulator-bootstrap.build.classes}" /> |
| <javac compiler="modern" debug="true" debuglevel="${debuglevel}" |
| source="${ant.java.version}" target="${ant.java.version}" |
| encoding="utf-8" destdir="${simulator-bootstrap.build.classes}" includeantruntime="true"> |
| <src path="${simulator-bootstrap.build.src}" /> |
| <classpath> |
| <fileset dir="${test.lib}"> |
| <include name="**/asm-*${asm.version}.jar" /> |
| </fileset> |
| <fileset dir="${build.lib}"> |
| <include name="**/asm-*${asm.version}.jar" /> |
| </fileset> |
| </classpath> |
| <compilerarg value="-XDignore.symbol.file"/> |
| </javac> |
| </target> |
| |
| <target name="write-poms" unless="without.maven"> |
| <filterset id="pom-template"> |
| <filter token="version" value="${version}"/> |
| <filter token="final.name" value="${final.name}"/> |
| <filter token="jamm.version" value="${jamm.version}"/> |
| <filter token="allocation-instrumenter.version" value="${allocation-instrumenter.version}"/> |
| <filter token="ecj.version" value="${ecj.version}"/> |
| <filter token="asm.version" value="${asm.version}"/> |
| <filter token="jacoco.version" value="${jacoco.version}"/> |
| <filter token="jflex.version" value="${jflex.version}"/> |
| </filterset> |
| |
| <copy file=".build/cassandra-deps-template.xml" tofile="${build.dir}/${final.name}.pom"> |
| <filterset refid="pom-template"/> |
| </copy> |
| <copy file=".build/parent-pom-template.xml" tofile="${build.dir}/${final.name}-parent.pom"> |
| <filterset refid="pom-template"/> |
| </copy> |
| <copy file=".build/cassandra-build-deps-template.xml" tofile="${build.dir}/tmp-${final.name}-deps.pom"> |
| <filterset refid="pom-template"/> |
| </copy> |
| </target> |
| |
| <!-- |
| The jar target makes cassandra.jar output. |
| --> |
| <target name="_main-jar" |
| depends="build" |
| description="Assemble Cassandra JAR files"> |
| <mkdir dir="${build.classes.main}/META-INF" /> |
| <copy file="LICENSE.txt" |
| tofile="${build.classes.main}/META-INF/LICENSE.txt"/> |
| <copy file="NOTICE.txt" |
| tofile="${build.classes.main}/META-INF/NOTICE.txt"/> |
| |
| <!-- Main Jar --> |
| <jar jarfile="${build.dir}/${final.name}.jar"> |
| <fileset dir="${build.classes.main}"> |
| </fileset> |
| <manifest> |
| <!-- <section name="org/apache/cassandra/infrastructure"> --> |
| <attribute name="Multi-Release" value="true"/> |
| <attribute name="Implementation-Title" value="Cassandra"/> |
| <attribute name="Implementation-Version" value="${version}"/> |
| <attribute name="Implementation-Vendor" value="Apache"/> |
| <attribute name="Implementation-Git-SHA" value="${git.sha}"/> |
| <!-- </section> --> |
| </manifest> |
| </jar> |
| </target> |
| |
| <target name="stress-jar" |
| depends="stress-build" |
| description="Assemble Cassandra JAR files"> |
| <!-- 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> |
| |
| <target name="fqltool-jar" |
| depends="fqltool-build" |
| description="Assemble Cassandra JAR files"> |
| |
| <!-- fqltool jar --> |
| <manifest file="${fqltool.manifest}"> |
| <attribute name="Built-By" value="Marcus Eriksson"/> |
| <attribute name="Main-Class" value="org.apache.cassandra.fqltool.FullQueryLogTool"/> |
| </manifest> |
| <mkdir dir="${fqltool.build.classes}/META-INF" /> |
| <mkdir dir="${build.dir}/tools/lib/" /> |
| <jar destfile="${build.dir}/tools/lib/fqltool.jar" manifest="${fqltool.manifest}"> |
| <fileset dir="${fqltool.build.classes}"/> |
| </jar> |
| </target> |
| |
| <target name="simulator-jars" |
| depends="simulator-asm-build,simulator-bootstrap-build" |
| description="Assemble Cassandra JAR files"> |
| |
| <!-- simulator asm jar --> |
| <manifest file="${simulator-asm.manifest}"> |
| <attribute name="Built-By" value="Benedict Elliott Smith"/> |
| <attribute name="Premain-Class" value="org.apache.cassandra.simulator.asm.InterceptAgent"/> |
| <attribute name="Agent-Class" value="org.apache.cassandra.simulator.asm.InterceptAgent"/> |
| <attribute name="Can-Redefine-Classes" value="true"/> |
| <attribute name="Can-Retransform-Classes" value="true"/> |
| </manifest> |
| <mkdir dir="${simulator-asm.build.classes}/META-INF" /> |
| <mkdir dir="${test.lib}/jars/" /> |
| <jar destfile="${test.lib}/jars/simulator-asm.jar" manifest="${simulator-asm.manifest}"> |
| <fileset dir="${simulator-asm.build.classes}"/> |
| <fileset dir="${test.lib}/jars"> |
| <include name="**/asm-*${asm.version}.jar" /> |
| </fileset> |
| </jar> |
| |
| <!-- simulator bootstrap jar --> |
| <manifest file="${simulator-bootstrap.manifest}"> |
| <attribute name="Built-By" value="Benedict Elliott Smith"/> |
| </manifest> |
| <mkdir dir="${simulator-bootstrap.build.classes}/META-INF" /> |
| <mkdir dir="${test.lib}/jars/" /> |
| <jar destfile="${test.lib}/jars/simulator-bootstrap.jar" manifest="${simulator-bootstrap.manifest}"> |
| <fileset dir="${simulator-bootstrap.build.classes}"/> |
| <fileset dir="${test.lib}/jars"> |
| <include name="**/asm-*${asm.version}.jar" /> |
| </fileset> |
| </jar> |
| </target> |
| |
| <target name="jar" |
| depends="_main-jar,build-test,stress-jar,fqltool-jar,simulator-jars,write-poms" |
| description="Assemble Cassandra JAR files"> |
| </target> |
| |
| <!-- |
| The javadoc-jar target makes cassandra-javadoc.jar output required for publishing to Maven central repository. |
| --> |
| <target name="javadoc-jar" depends="javadoc" unless="no-javadoc" description="Assemble Cassandra JavaDoc JAR file"> |
| <jar jarfile="${build.dir}/${final.name}-javadoc.jar" basedir="${javadoc.dir}"/> |
| <!-- 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.dir}"/> |
| </target> |
| |
| <!-- |
| The sources-jar target makes cassandra-sources.jar output required for publishing to Maven central repository. |
| --> |
| <target name="sources-jar" depends="init" description="Assemble Cassandra Sources JAR file"> |
| <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> |
| </target> |
| |
| <target name="_artifacts-init" depends="jar"> |
| <mkdir dir="${dist.dir}"/> |
| <!-- fix the control linefeed so that builds on windows works on linux --> |
| <fixcrlf srcdir="bin" includes="**/*" eol="lf" eof="remove" /> |
| <fixcrlf srcdir="conf" includes="**/*" eol="lf" eof="remove" /> |
| <fixcrlf srcdir="tools/bin" includes="**/*" eol="lf" eof="remove" /> |
| <copy todir="${dist.dir}/lib"> |
| <fileset dir="${build.lib}"/> |
| <fileset dir="${build.dir}"> |
| <include name="${final.name}.jar" /> |
| </fileset> |
| </copy> |
| <copy todir="${dist.dir}/doc" failonerror="false"> |
| <fileset dir="doc"> |
| <include name="cql3/CQL.html" /> |
| <include name="cql3/CQL.css" /> |
| <include name="SASI.md" /> |
| </fileset> |
| </copy> |
| <copy todir="${dist.dir}/doc/html" failonerror="false"> |
| <fileset dir="doc" /> |
| <globmapper from="build/html/*" to="*"/> |
| </copy> |
| <copy todir="${dist.dir}/bin"> |
| <fileset dir="bin"/> |
| </copy> |
| <copy todir="${dist.dir}/conf"> |
| <fileset dir="conf"/> |
| </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/"> |
| <fileset dir="${basedir}/tools/"> |
| <include name="*.yaml"/> |
| </fileset> |
| </copy> |
| <copy todir="${dist.dir}/tools/lib"> |
| <fileset dir="${build.dir}/tools/lib/"> |
| <include name="*.jar" /> |
| </fileset> |
| </copy> |
| </target> |
| |
| <!-- creates release tarballs --> |
| <target name="artifacts" depends="_artifacts-init,check,gen-doc,sources-jar" |
| description="Create Cassandra tarball and maven artifacts"> |
| <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/*" /> |
| <exclude name="tools/bin/*"/> |
| </tarfileset> |
| <!-- Shell includes in bin/ (default mode) --> |
| <tarfileset dir="${dist.dir}" prefix="${final.name}"> |
| <include name="bin/*.in.sh" /> |
| <include name="tools/bin/*.in.sh" /> |
| </tarfileset> |
| <!-- Executable scripts in bin/ --> |
| <tarfileset dir="${dist.dir}" prefix="${final.name}" mode="755"> |
| <include name="bin/*"/> |
| <include name="tools/bin/*"/> |
| <exclude name="bin/*.in.sh" /> |
| <exclude name="tools/bin/*.in.sh" /> |
| </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="lib/**" /> |
| <exclude name="src/gen-java/**" /> |
| <exclude name=".git/**" /> |
| <exclude name="venv/**" /> |
| <exclude name="src/resources/org/apache/cassandra/config/version.properties" /> |
| <exclude name="conf/hotspot_compiler" /> |
| <exclude name="doc/cql3/CQL.html" /> |
| <exclude name="doc/build/**" /> |
| <exclude name="bin/*" /> <!-- handled separately below --> |
| <exclude name="tools/bin/*" /> <!-- handled separately below --> |
| <!-- exclude python generated files --> |
| <exclude name="**/__pycache__/**" /> |
| <!-- exclude Eclipse files --> |
| <exclude name=".project" /> |
| <exclude name=".classpath" /> |
| <exclude name=".settings/**" /> |
| <exclude name=".externalToolBuilders/**" /> |
| <!-- exclude NetBeans files --> |
| <exclude name="ide/nbproject/private/**" /> |
| </tarfileset> |
| |
| <!-- python driver --> |
| <tarfileset dir="${basedir}" prefix="${final.name}-src"> |
| <include name="lib/cassandra-driver-internal-only-**" /> |
| </tarfileset> |
| |
| <!-- Shell includes in bin/ and tools/bin/ --> |
| <tarfileset dir="${basedir}" prefix="${final.name}-src"> |
| <include name="bin/*.in.sh" /> |
| <include name="tools/bin/*.in.sh" /> |
| </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" /> |
| <include name="tools/bin/*"/> |
| <exclude name="tools/bin/*.in.sh" /> |
| </tarfileset> |
| </tar> |
| |
| <checksum forceOverwrite="yes" todir="${build.dir}" fileext=".sha256" algorithm="SHA-256"> |
| <fileset dir="${build.dir}"> |
| <include name="${final.name}-bin.tar.gz" /> |
| <include name="${final.name}-src.tar.gz" /> |
| </fileset> |
| </checksum> |
| <checksum forceOverwrite="yes" todir="${build.dir}" fileext=".sha512" algorithm="SHA-512"> |
| <fileset dir="${build.dir}"> |
| <include name="${final.name}-bin.tar.gz" /> |
| <include name="${final.name}-src.tar.gz" /> |
| </fileset> |
| </checksum> |
| </target> |
| |
| <!-- Wrapper of build-test without dependencies, so both that target and its dependencies are skipped if the property |
| no-build-test is true. This is meant to be used to run tests without actually building them, provided that they have |
| been built before. All test targets depend on this, so one can run them using the no-build-test property. |
| For example: |
| |
| ant test -Dno-build-test=true |
| ant test -Dtest.name=StorageServiceServerTest -Dno-build-test=true |
| ant testsome -Dtest.name=org.apache.cassandra.service.StorageServiceServerTest -Dno-build-test=true |
| |
| The property is false by default, so if it's not specified the tests would be built with all their dependencies. |
| See CASSANDRA-16625 and CASSANDRA-18000 for further details. |
| --> |
| <target name="maybe-build-test" unless="no-build-test"> |
| <antcall target="build-test" inheritRefs="true"/> |
| </target> |
| |
| <target name="build-test" depends="_main-jar,stress-build-test,fqltool-build,resolver-dist-lib,simulator-jars" |
| description="Compile test classes"> |
| <antcall target="_build-test"/> |
| <antcall target="_check-test-names"/> |
| </target> |
| |
| <target name="_build-test"> |
| <javac |
| compiler="modern" |
| debug="true" |
| debuglevel="${debuglevel}" |
| destdir="${test.classes}" |
| includeantruntime="true" |
| source="${ant.java.version}" |
| target="${ant.java.version}" |
| encoding="utf-8"> |
| <classpath> |
| <path refid="cassandra.classpath.test"/> |
| <pathelement location="${fqltool.build.classes}"/> |
| </classpath> |
| <compilerarg value="-XDignore.symbol.file"/> |
| <!-- needed to compile org.apache.cassandra.utils.memory.BufferPoolTest --> |
| <compilerarg line="${jdk11plus-javac-exports}"/> |
| <src path="${test.anttasks.src}"/> |
| <src path="${test.unit.src}"/> |
| <src path="${test.long.src}"/> |
| <src path="${test.burn.src}"/> |
| <src path="${test.memory.src}"/> |
| <src path="${test.microbench.src}"/> |
| <src path="${test.distributed.src}"/> |
| <src path="${test.simulator.src}"/> |
| <src path="${test.simulator-asm.src}"/> |
| <src path="${test.simulator-bootstrap.src}"/> |
| <src path="${test.simulator-test.src}"/> |
| <compilerarg line="${jdk11plus-javac-exports}"/> |
| </javac> |
| |
| <!-- Non-java resources needed by the test suite --> |
| <copy todir="${test.classes}"> |
| <fileset dir="${test.resources}"/> |
| </copy> |
| </target> |
| |
| <macrodef name="check-test-names"> |
| <attribute name="annotationName"/> |
| <attribute name="regex"/> |
| <attribute name="scanClassPath" default="${test.classes}:${fqltool.test.classes}:${stress.test.classes}"/> |
| <attribute name="packageName" default="org.apache.cassandra"/> |
| <attribute name="expand" default="true"/> |
| <attribute name="normalize" default="true"/> |
| <attribute name="verbose" default="false"/> |
| |
| <sequential> |
| <java taskname="check-test-names" fork="true" failonerror="yes" classname="org.apache.cassandra.anttasks.TestNameCheckTask"> |
| <classpath> |
| <path refid="cassandra.classpath.test"/> |
| <pathelement location="${fqltool.build.classes}"/> |
| <pathelement location="${stress.build.classes}"/> |
| <pathelement location="${test.classes}"/> |
| <pathelement location="${fqltool.test.classes}"/> |
| <pathelement location="${stress.test.classes}"/> |
| </classpath> |
| <jvmarg line="${java-jvmargs}"/> |
| <jvmarg value="-DscanClassPath=@{scanClassPath}"/> |
| <jvmarg value="-DpackageName=@{packageName}"/> |
| <jvmarg value="-DannotationName=@{annotationName}"/> |
| <jvmarg value="-Dexpand=@{expand}"/> |
| <jvmarg value="-Dnormalize=@{normalize}"/> |
| <jvmarg value="-Dverbose=@{verbose}"/> |
| <jvmarg value="-Dregex=@{regex}"/> |
| </java> |
| </sequential> |
| </macrodef> |
| |
| <target name="_check-test-names"> |
| <check-test-names annotationName="org.junit.Test" regex=".*Test$"/> |
| <check-test-names annotationName="org.openjdk.jmh.annotations.Benchmark" regex=".*(Bench|_jmhType.*)$"/> |
| </target> |
| |
| <!-- Run tests separately and report errors after and generate a junit report --> |
| <macrodef name="testhelper"> |
| <attribute name="testdelegate"/> |
| <sequential> |
| <taskdef name="testhelper_" classname="org.apache.cassandra.anttasks.TestHelper" classpath="${test.classes}"/> |
| <testhelper_ property="@{testdelegate}"/> |
| <fail message="Some test(s) failed."> |
| <condition> |
| <and> |
| <isset property="testfailed"/> |
| <not> |
| <isset property="ant.test.failure.ignore"/> |
| </not> |
| </and> |
| </condition> |
| </fail> |
| </sequential> |
| </macrodef> |
| |
| <!-- Run a list of junit tasks but don't track errors or generate a report after |
| If a test fails the testfailed property will be set. All the tests are run using the testdelegate |
| macro that is specified as an attribute and they will be run sequentially in this ant process --> |
| |
| <!-- Defines how to run a set of tests. If you change the defaults for attributes |
| you should also update them in testmacro., |
| The two are split because the helper doesn't generate |
| a junit report or fail on errors --> |
| <macrodef name="testmacrohelper"> |
| <attribute name="inputdir" /> |
| <attribute name="timeout" default="${test.timeout}" /> |
| <attribute name="forkmode" default="perTest"/> |
| <element name="optjvmargs" implicit="true" optional="true" /> |
| <attribute name="filter" default="**/${test.name}.java"/> |
| <attribute name="exclude" default="" /> |
| <attribute name="filelist" default="" /> |
| <attribute name="testtag" default=""/> |
| <attribute name="usejacoco" default="no"/> |
| <attribute name="showoutput" default="false"/> |
| |
| <sequential> |
| <fail message="testing with build.test.dir (${build.test.dir}) not pointing to 'build/test/' will fail, test configurations are hardcoded."> |
| <condition><not><equals arg1="${build.test.dir}" arg2="${basedir}/build/test"/></not></condition> |
| </fail> |
| <condition property="additionalagent" |
| value="-javaagent:${build.dir.lib}/jars/jacocoagent.jar=destfile=${jacoco.partialexecfile}" |
| else=""> |
| <istrue value="${usejacoco}"/> |
| </condition> |
| <taskdef name="junit-timeout" classname="org.apache.cassandra.JStackJUnitTask"> |
| <classpath> |
| <pathelement location="${test.classes}"/> |
| </classpath> |
| </taskdef> |
| <mkdir dir="${build.test.dir}/cassandra"/> |
| <mkdir dir="${build.test.dir}/output"/> |
| <mkdir dir="${build.test.dir}/output/@{testtag}"/> |
| <mkdir dir="${tmp.dir}"/> |
| <junit-timeout fork="on" forkmode="@{forkmode}" failureproperty="testfailed" maxmemory="1024m" timeout="@{timeout}" showoutput="@{showoutput}"> |
| <formatter classname="org.apache.cassandra.CassandraXMLJUnitResultFormatter" extension=".xml" usefile="true"/> |
| <formatter classname="org.apache.cassandra.CassandraBriefJUnitResultFormatter" usefile="false"/> |
| <jvmarg value="-Dstorage-config=${test.conf}"/> |
| <jvmarg value="-Djava.awt.headless=true"/> |
| <!-- Cassandra 3.0+ needs <jvmarg line="... ${additionalagent}" /> here! (not value=) --> |
| <jvmarg line="-javaagent:${build.dir.lib}/jars/jamm-${jamm.version}.jar ${additionalagent}" /> |
| <jvmarg value="-ea"/> |
| <jvmarg value="-Djava.io.tmpdir=${tmp.dir}"/> |
| <jvmarg value="-Dcassandra.debugrefcount=true"/> |
| <jvmarg value="${jvm_xss}"/> |
| <!-- When we do classloader manipulation SoftReferences can cause memory leaks |
| that can OOM our test runs. The next two settings informs our GC |
| algorithm to limit the metaspace size and clean up SoftReferences |
| more aggressively rather than waiting. See CASSANDRA-14922 for more details. |
| --> |
| <jvmarg value="-XX:SoftRefLRUPolicyMSPerMB=0" /> |
| <jvmarg value="-XX:ActiveProcessorCount=${cassandra.test.processorCount}" /> |
| <jvmarg value="-XX:HeapDumpPath=${build.test.dir}" /> |
| <jvmarg value="-Dcassandra.test.driver.connection_timeout_ms=${test.driver.connection_timeout_ms}"/> |
| <jvmarg value="-Dcassandra.test.driver.read_timeout_ms=${test.driver.read_timeout_ms}"/> |
| <jvmarg value="-Dcassandra.memtable_row_overhead_computation_step=100"/> |
| <jvmarg value="-Dcassandra.test.use_prepared=${cassandra.test.use_prepared}"/> |
| <jvmarg value="-Dcassandra.test.sstableformatdevelopment=true"/> |
| <!-- The first time SecureRandom initializes can be slow if it blocks on /dev/random --> |
| <jvmarg value="-Djava.security.egd=file:/dev/urandom" /> |
| <jvmarg value="-Dcassandra.testtag=@{testtag}.jdk${ant.java.version}${testtag.extra}"/> |
| <jvmarg value="-Dcassandra.keepBriefBrief=${cassandra.keepBriefBrief}" /> |
| <jvmarg value="-Dcassandra.strict.runtime.checks=true" /> |
| <jvmarg value="-Dcassandra.reads.thresholds.coordinator.defensive_checks_enabled=true" /> <!-- enable defensive checks --> |
| <jvmarg value="-Dcassandra.test.flush_local_schema_changes=${cassandra.test.flush_local_schema_changes}"/> |
| <jvmarg value="-Dcassandra.test.messagingService.nonGracefulShutdown=${cassandra.test.messagingService.nonGracefulShutdown}"/> |
| <jvmarg value="-Dcassandra.use_nix_recursive_delete=${cassandra.use_nix_recursive_delete}"/> |
| <jvmarg value="-Dio.netty.allocator.useCacheForAllThreads=true"/> |
| <jvmarg value="-Dio.netty.allocator.maxOrder=11"/> |
| <jvmarg line="${java-jvmargs}"/> |
| <!-- disable shrinks in quicktheories CASSANDRA-15554 --> |
| <jvmarg value="-DQT_SHRINKS=0"/> |
| <jvmarg line="${_std-test-jvmargs} " /> |
| <jvmarg line="${test.jvm.args}" /> |
| <optjvmargs/> |
| <!-- Uncomment to debug unittest, attach debugger to port 1416 --> |
| <!-- |
| <jvmarg line="-agentlib:jdwp=transport=dt_socket,address=localhost:1416,server=y,suspend=y" /> |
| --> |
| <classpath> |
| <pathelement path="${java.class.path}"/> |
| <pathelement location="${stress.build.classes}"/> |
| <pathelement location="${fqltool.build.classes}"/> |
| <pathelement location="${test.classes}"/> |
| <path refid="cassandra.classpath.test" /> |
| <pathelement location="${stress.test.classes}"/> |
| <pathelement location="${fqltool.test.classes}"/> |
| <pathelement location="${test.conf}"/> |
| <pathelement path="${java.class.path}"/> |
| <path refid="cassandra.classpath" /> |
| <fileset dir="${test.lib}"> |
| <include name="**/*.jar" /> |
| <exclude name="**/ant-*.jar"/> |
| </fileset> |
| </classpath> |
| <batchtest todir="${build.test.dir}/output/@{testtag}"> |
| <fileset dir="@{inputdir}" includes="@{filter}" excludes="@{exclude}"/> |
| <filelist dir="@{inputdir}" files="@{filelist}"/> |
| </batchtest> |
| </junit-timeout> |
| |
| <delete quiet="true" failonerror="false" dir="${build.test.dir}/cassandra/commitlog"/> |
| <delete quiet="true" failonerror="false" dir="${build.test.dir}/cassandra/cdc_raw"/> |
| <delete quiet="true" failonerror="false" dir="${build.test.dir}/cassandra/data"/> |
| <delete quiet="true" failonerror="false" dir="${build.test.dir}/cassandra/ssl_upload_tables"/> |
| <delete quiet="true" failonerror="false" dir="${build.test.dir}/cassandra/system_data"/> |
| <delete quiet="true" failonerror="false" dir="${build.test.dir}/cassandra/saved_caches"/> |
| <delete quiet="true" failonerror="false" dir="${build.test.dir}/cassandra/hints"/> |
| </sequential> |
| </macrodef> |
| |
| <target name="testold" depends="maybe-build-test" description="Execute unit tests"> |
| <testmacro inputdir="${test.unit.src}" timeout="${test.timeout}"> |
| <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> |
| <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacro> |
| <fileset dir="${test.unit.src}" /> |
| </target> |
| |
| <!-- Will not generate a junit report or fail on error --> |
| <macrodef name="testlist"> |
| <attribute name="test.file.list"/> |
| <sequential> |
| <testmacrohelper inputdir="${test.dir}/${test.classlistprefix}" filelist="@{test.file.list}" exclude="**/*.java" timeout="${test.timeout}"> |
| <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> |
| <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacrohelper> |
| </sequential> |
| </macrodef> |
| |
| <!-- Will not generate a junit report --> |
| <macrodef name="testlist-compression"> |
| <attribute name="test.file.list" /> |
| <sequential> |
| <property name="compressed_yaml" value="${build.test.dir}/cassandra.compressed.yaml"/> |
| <concat destfile="${compressed_yaml}"> |
| <fileset file="${test.conf}/cassandra.yaml"/> |
| <fileset file="${test.conf}/commitlog_compression_${test.compression.algo}.yaml"/> |
| </concat> |
| <testmacrohelper inputdir="${test.unit.src}" filelist="@{test.file.list}" |
| exclude="**/*.java" timeout="${test.timeout}" testtag="compression"> |
| <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> |
| <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> |
| <jvmarg value="-Dcassandra.test.compression=true"/> |
| <jvmarg value="-Dcassandra.test.compression.algo=${test.compression.algo}"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.config=file:///${compressed_yaml}"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacrohelper> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="testlist-cdc"> |
| <attribute name="test.file.list" /> |
| <sequential> |
| <property name="cdc_yaml" value="${build.test.dir}/cassandra.cdc.yaml"/> |
| <concat destfile="${cdc_yaml}"> |
| <fileset file="${test.conf}/cassandra.yaml"/> |
| <fileset file="${test.conf}/cdc.yaml"/> |
| </concat> |
| <testmacrohelper inputdir="${test.unit.src}" filelist="@{test.file.list}" |
| exclude="**/*.java" timeout="${test.timeout}" testtag="cdc"> |
| <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> |
| <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.config=file:///${cdc_yaml}"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacrohelper> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="testlist-trie"> |
| <attribute name="test.file.list" /> |
| <sequential> |
| <property name="trie_yaml" value="${build.test.dir}/cassandra.trie.yaml"/> |
| <concat destfile="${trie_yaml}"> |
| <fileset file="${test.conf}/cassandra.yaml"/> |
| <fileset file="${test.conf}/trie_memtable.yaml"/> |
| <fileset file="${test.conf}/storage_compatibility_mode_none.yaml"/> |
| </concat> |
| <testmacrohelper inputdir="${test.unit.src}" filelist="@{test.file.list}" |
| exclude="**/*.java" timeout="${test.timeout}" testtag="trie"> |
| <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> |
| <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.config=file:///${trie_yaml}"/> |
| <jvmarg value="-Dcassandra.junit_storage_compatibility_mode=NONE"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacrohelper> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="testlist-oa"> |
| <attribute name="test.file.list"/> |
| <sequential> |
| <property name="scm_none_yaml" value="${build.test.dir}/cassandra.scm_none.yaml"/> |
| <concat destfile="${scm_none_yaml}"> |
| <fileset file="${test.conf}/cassandra.yaml"/> |
| <fileset file="${test.conf}/storage_compatibility_mode_none.yaml"/> |
| </concat> |
| <testmacrohelper inputdir="${test.dir}/${test.classlistprefix}" filelist="@{test.file.list}" |
| exclude="**/*.java" timeout="${test.timeout}" testtag="oa"> |
| <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> |
| <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.config=file:///${scm_none_yaml}"/> |
| <jvmarg value="-Dcassandra.junit_storage_compatibility_mode=NONE"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacrohelper> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="testlist-system-keyspace-directory"> |
| <attribute name="test.file.list" /> |
| <sequential> |
| <property name="system_keyspaces_directory_yaml" value="${build.test.dir}/cassandra.system.yaml"/> |
| <concat destfile="${system_keyspaces_directory_yaml}"> |
| <fileset file="${test.conf}/cassandra.yaml"/> |
| <fileset file="${test.conf}/system_keyspaces_directory.yaml"/> |
| </concat> |
| <testmacrohelper inputdir="${test.unit.src}" filelist="@{test.file.list}" |
| exclude="**/*.java" timeout="${test.timeout}" testtag="system_keyspace_directory"> |
| <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> |
| <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.config=file:///${system_keyspaces_directory_yaml}"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacrohelper> |
| </sequential> |
| </macrodef> |
| |
| <!-- |
| Run named ant task with jacoco, such as "ant jacoco-run -Dtaskname=test" |
| the target run must enable the jacoco agent if usejacoco is 'yes' --> |
| <target name="jacoco-run" description="run named task with jacoco instrumentation"> |
| <condition property="runtask" value="${taskname}" else="test"> |
| <isset property="taskname"/> |
| </condition> |
| <antcall target="${runtask}"> |
| <param name="usejacoco" value="yes"/> |
| </antcall> |
| </target> |
| |
| <!-- Use this with an FQDN for test class, and an optional csv list of methods like this: |
| ant testsome -Dtest.name=org.apache.cassandra.service.StorageServiceServerTest |
| ant testsome -Dtest.name=org.apache.cassandra.service.StorageServiceServerTest -Dtest.methods=testRegularMode,testGetAllRangesEmpty |
| --> |
| <target name="testsome" depends="maybe-build-test" description="Execute specific unit tests" > |
| <condition property="withoutMethods"> |
| <and> |
| <equals arg1="${test.methods}" arg2=""/> |
| <not> |
| <contains string="${test.name}" substring="*"/> |
| </not> |
| </and> |
| </condition> |
| <condition property="withMethods"> |
| <and> |
| <not> |
| <equals arg1="${test.methods}" arg2=""/> |
| </not> |
| <not> |
| <contains string="${test.name}" substring="*"/> |
| </not> |
| </and> |
| </condition> |
| <testmacro inputdir="${test.unit.src}" timeout="${test.timeout}"> |
| <test if="withMethods" name="${test.name}" methods="${test.methods}" todir="${build.test.dir}/output/" outfile="TEST-${test.name}-${test.methods}"/> |
| <test if="withoutMethods" name="${test.name}" todir="${build.test.dir}/output/" outfile="TEST-${test.name}"/> |
| <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> |
| <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacro> |
| </target> |
| |
| <!-- Use this with an FQDN for test class, and an optional csv list of methods like this: |
| ant long-testsome -Dtest.name=org.apache.cassandra.cql3.ManyRowsTest |
| ant long-testsome -Dtest.name=org.apache.cassandra.cql3.ManyRowsTest -Dtest.methods=testLargeCount |
| --> |
| <target name="long-testsome" depends="maybe-build-test" description="Execute specific long unit tests" > |
| <testmacro inputdir="${test.long.src}" timeout="${test.long.timeout}"> |
| <test unless:blank="${test.methods}" name="${test.name}" methods="${test.methods}"/> |
| <test if:blank="${test.methods}" name="${test.name}"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=1000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| </testmacro> |
| </target> |
| |
| <!-- Use this with an FQDN for test class, and an optional csv list of methods like this: |
| ant burn-testsome -Dtest.name=org.apache.cassandra.utils.memory.LongBufferPoolTest |
| ant burn-testsome -Dtest.name=org.apache.cassandra.utils.memory.LongBufferPoolTest -Dtest.methods=testPoolAllocateWithRecyclePartially |
| --> |
| <target name="burn-testsome" depends="maybe-build-test" description="Execute specific burn unit tests" > |
| <testmacro inputdir="${test.burn.src}" timeout="${test.burn.timeout}"> |
| <test unless:blank="${test.methods}" name="${test.name}" methods="${test.methods}"/> |
| <test if:blank="${test.methods}" name="${test.name}"/> |
| <jvmarg value="-Dlogback.configurationFile=test/conf/logback-burntest.xml"/> |
| </testmacro> |
| </target> |
| |
| <target name="test-compression" depends="maybe-build-test,stress-build" description="Execute unit tests with sstable compression enabled"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.unit.src}" includes="**/${test.name}.java" /> |
| <fileset dir="${test.distributed.src}" includes="**/${test.name}.java" /> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-compression" /> |
| </target> |
| |
| <target name="test-cdc" depends="maybe-build-test" description="Execute unit tests with change-data-capture enabled"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.unit.src}" includes="**/${test.name}.java" /> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-cdc" /> |
| </target> |
| |
| <target name="test-trie" depends="maybe-build-test" description="Execute unit tests with trie memtables"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.unit.src}" includes="**/${test.name}.java" /> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-trie" /> |
| </target> |
| |
| <target name="test-oa" depends="maybe-build-test" description="Test Runner for the oa sstable format"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.unit.src}" includes="**/${test.name}.java" excludes="**/distributed/test/UpgradeTest*.java" /> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-oa"/> |
| </target> |
| |
| <target name="test-system-keyspace-directory" depends="maybe-build-test" description="Execute unit tests with a system keyspaces directory configured"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.unit.src}" includes="**/${test.name}.java" /> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-system-keyspace-directory" /> |
| </target> |
| |
| <target name="msg-ser-gen-test" depends="maybe-build-test" description="Generates message serializations"> |
| <testmacro 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="maybe-build-test" description="Tests message serializations"> |
| <testmacro inputdir="${test.unit.src}" timeout="${test.timeout}" |
| filter="**/SerializationsTest.java"/> |
| </target> |
| |
| <target name="msg-ser-test-7" depends="maybe-build-test" description="Generates message serializations"> |
| <testmacro 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="maybe-build-test" description="Tests message serializations on 1.0 messages"> |
| <testmacro inputdir="${test.unit.src}" |
| timeout="${test.timeout}" filter="**/SerializationsTest.java"> |
| <jvmarg value="-Dcassandra.version=1.0"/> |
| </testmacro> |
| </target> |
| |
| <target name="test-burn" depends="maybe-build-test" description="Execute functional tests"> |
| <testmacro inputdir="${test.burn.src}" |
| timeout="${test.burn.timeout}"> |
| </testmacro> |
| </target> |
| |
| <target name="long-test" depends="maybe-build-test" description="Execute functional tests"> |
| <testmacro 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="test-memory" depends="maybe-build-test" description="Execute functional tests"> |
| <testmacro inputdir="${test.memory.src}" |
| timeout="${test.memory.timeout}"> |
| <jvmarg value="-javaagent:${build.dir}/test/lib/jars/java-allocation-instrumenter-${allocation-instrumenter.version}.jar"/> |
| </testmacro> |
| </target> |
| |
| <target name="cql-test" depends="maybe-build-test" description="Execute CQL tests"> |
| <sequential> |
| <echo message="running CQL tests"/> |
| <mkdir dir="${build.test.dir}/cassandra"/> |
| <mkdir dir="${build.test.dir}/output"/> |
| <junit fork="on" forkmode="once" failureproperty="testfailed" maxmemory="1024m" timeout="${test.timeout}"> |
| <formatter type="brief" usefile="false"/> |
| <jvmarg value="-Dstorage-config=${test.conf}"/> |
| <jvmarg value="-Djava.awt.headless=true"/> |
| <jvmarg value="-javaagent:${build.dir.lib}/jars/jamm-${jamm.version}.jar" /> |
| <jvmarg value="-ea"/> |
| <jvmarg value="${jvm_xss}"/> |
| <jvmarg value="-Dcassandra.memtable_row_overhead_computation_step=100"/> |
| <jvmarg value="-Dcassandra.test.use_prepared=${cassandra.test.use_prepared}"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| <classpath> |
| <path refid="cassandra.classpath.test" /> |
| <pathelement location="${test.classes}"/> |
| <pathelement location="${test.conf}"/> |
| <fileset dir="${test.lib}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </classpath> |
| <batchtest todir="${build.test.dir}/output"> |
| <fileset dir="${test.unit.src}" includes="**/cql3/*Test.java"> |
| <contains text="CQLTester" casesensitive="yes"/> |
| </fileset> |
| </batchtest> |
| </junit> |
| <fail message="Some CQL test(s) failed."> |
| <condition> |
| <and> |
| <isset property="testfailed"/> |
| <not> |
| <isset property="ant.test.failure.ignore"/> |
| </not> |
| </and> |
| </condition> |
| </fail> |
| </sequential> |
| </target> |
| |
| <!-- Use this with an simple class name for test class, and an optional csv list of methods like this: |
| ant cql-test-some -Dtest.name=ListsTest |
| ant cql-test-some -Dtest.name=ListsTest -Dtest.methods=testPrecisionTime_getNext_simple |
| --> |
| <target name="cql-test-some" depends="maybe-build-test" description="Execute specific CQL tests" > |
| <sequential> |
| <echo message="running ${test.methods} tests from ${test.name}"/> |
| <mkdir dir="${build.test.dir}/cassandra"/> |
| <mkdir dir="${build.test.dir}/output"/> |
| <junit fork="on" forkmode="once" failureproperty="testfailed" maxmemory="1024m" timeout="${test.timeout}"> |
| <formatter type="brief" usefile="false"/> |
| <jvmarg value="-Dstorage-config=${test.conf}"/> |
| <jvmarg value="-Djava.awt.headless=true"/> |
| <jvmarg value="-javaagent:${build.dir.lib}/jars/jamm-${jamm.version}.jar" /> |
| <jvmarg value="-ea"/> |
| <jvmarg value="${jvm_xss}"/> |
| <jvmarg value="-Dcassandra.test.use_prepared=${cassandra.test.use_prepared}"/> |
| <jvmarg value="-Dcassandra.memtable_row_overhead_computation_step=100"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| <classpath> |
| <path refid="cassandra.classpath.test" /> |
| <pathelement location="${test.classes}"/> |
| <pathelement location="${test.conf}"/> |
| <fileset dir="${test.lib}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </classpath> |
| <test unless:blank="${test.methods}" name="org.apache.cassandra.cql3.${test.name}" methods="${test.methods}" todir="${build.test.dir}/output"/> |
| <test if:blank="${test.methods}" name="org.apache.cassandra.cql3.${test.name}" todir="${build.test.dir}/output"/> |
| </junit> |
| </sequential> |
| </target> |
| |
| <!-- Use JaCoCo ant extension without needing externally saved lib --> |
| <target name="jacoco-init" depends="resolver-init"> |
| <typedef uri="antlib:org.jacoco.ant" classpathref="jacocoant.classpath"/> |
| </target> |
| |
| <target name="jacoco-merge" depends="jacoco-init"> |
| <jacoco:merge destfile="${jacoco.finalexecfile}" xmlns:jacoco="antlib:org.jacoco.ant"> |
| <fileset dir="${jacoco.export.dir}" includes="*.exec,**/*.exec"/> |
| </jacoco:merge> |
| </target> |
| |
| <target name="jacoco-report" depends="jacoco-merge"> |
| <jacoco:report xmlns:jacoco="antlib:org.jacoco.ant"> |
| <executiondata> |
| <file file="${jacoco.finalexecfile}" /> |
| </executiondata> |
| <structure name="JaCoCo Cassandara Coverage Report"> |
| <classfiles> |
| <fileset dir="${build.classes.main}"> |
| <include name="**/*.class"/> |
| </fileset> |
| </classfiles> |
| <sourcefiles encoding="UTF-8"> |
| <dirset dir="${build.src}"> |
| <include name="java"/> |
| <include name="gen-java"/> |
| </dirset> |
| </sourcefiles> |
| </structure> |
| <!-- to produce reports in different formats. --> |
| <html destdir="${jacoco.export.dir}" /> |
| <csv destfile="${jacoco.export.dir}/report.csv" /> |
| <xml destfile="${jacoco.export.dir}/report.xml" /> |
| </jacoco:report> |
| </target> |
| |
| <target name="jacoco-cleanup" description="Destroy JaCoCo exec data and reports"> |
| <delete file="${jacoco.partialexecfile}"/> |
| <delete dir="${jacoco.export.dir}"/> |
| </target> |
| |
| <target name="javadoc" depends="build" description="Create javadoc" unless="no-javadoc"> |
| <create-javadoc destdir="${javadoc.dir}"> |
| <filesets> |
| <fileset dir="${build.src.java}" defaultexcludes="yes"> |
| <include name="org/apache/**/*.java"/> |
| </fileset> |
| </filesets> |
| </create-javadoc> |
| </target> |
| |
| <!-- Run tests and reports errors and generates a junit report after --> |
| <macrodef name="testmacro"> |
| <attribute name="inputdir" /> |
| <attribute name="timeout" default="${test.timeout}" /> |
| <attribute name="forkmode" default="perTest"/> |
| <attribute name="showoutput" default="true"/> |
| <element name="optjvmargs" implicit="true" optional="true" /> |
| <attribute name="filter" default="**/${test.name}.java"/> |
| <attribute name="exclude" default="" /> |
| <attribute name="filelist" default="" /> |
| <attribute name="testtag" default=""/> |
| |
| <sequential> |
| <testmacrohelper inputdir="@{inputdir}" timeout="@{timeout}" |
| forkmode="@{forkmode}" filter="@{filter}" |
| exclude="@{exclude}" filelist="@{filelist}" |
| testtag="@{testtag}" showoutput="false" > |
| <optjvmargs/> |
| </testmacrohelper> |
| <fail message="Some 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="maybe-build-test" description="Test Runner"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.unit.src}" includes="**/${test.name}.java" excludes="**/distributed/test/UpgradeTest*.java" /> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist"/> |
| </target> |
| |
| <target name="generate-test-report" description="Generates JUnit's HTML report from results already in build/output"> |
| <junitreport todir="${build.test.dir}"> |
| <fileset dir="${build.test.dir}/output"> |
| <include name="**/TEST-*.xml"/> |
| </fileset> |
| <report format="frames" todir="${build.test.dir}/junitreport"/> |
| </junitreport> |
| </target> |
| |
| <!-- run a list of tests as provided in -Dtest.classlistfile (or default of 'testnames.txt') |
| The class list file should be one test class per line, with the path starting after test/unit |
| e.g. org/apache/cassandra/hints/HintMessageTest.java --> |
| <target name="testclasslist" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist"/> |
| </target> |
| <target name="testclasslist-oa" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-oa"/> |
| </target> |
| <target name="testclasslist-compression" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-compression"/> |
| </target> |
| <target name="testclasslist-trie" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-trie"/> |
| </target> |
| <target name="testclasslist-cdc" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-cdc"/> |
| </target> |
| <target name="testclasslist-system-keyspace-directory" depends="maybe-build-test" description="Run tests given in file -Dtest.classlistfile (one-class-per-line, e.g. org/apache/cassandra/db/SomeTest.java)"> |
| <path id="all-test-classes-path"> |
| <fileset dir="${test.dir}/${test.classlistprefix}" includesfile="${test.classlistfile}"/> |
| </path> |
| <property name="all-test-classes" refid="all-test-classes-path"/> |
| <testhelper testdelegate="testlist-system-keyspace-directory"/> |
| </target> |
| |
| <!-- Build a self-contained jar for e.g. remote execution; not currently used for running burn tests with this build script --> |
| <target name="burn-test-jar" depends="build-test, build" description="Create dtest-compatible jar, including all dependencies"> |
| <jar jarfile="${build.dir}/burntest.jar"> |
| <zipgroupfileset dir="${build.lib}" includes="*.jar" excludes="META-INF/*.SF"/> |
| <fileset dir="${build.classes.main}"/> |
| <fileset dir="${test.classes}"/> |
| <fileset dir="${test.conf}" excludes="logback*.xml"/> |
| <fileset dir="${basedir}/conf" includes="logback*.xml"/> |
| <zipgroupfileset dir="${build.dir.lib}/jars"> |
| <include name="junit*.jar"/> |
| </zipgroupfileset> |
| </jar> |
| </target> |
| |
| <target name="dtest-jar" depends="build-test, build" description="Create dtest-compatible jar, including all dependencies"> |
| <delete dir="${build.dir}/dtest/**" quiet="true"/> |
| |
| <copy todir="${build.dir}/dtest" quiet="true" overwrite="false"> |
| <fileset dir="${build.classes.main}"/> |
| <fileset dir="${test.classes}"/> |
| <fileset dir="${test.conf}"/> |
| </copy> |
| <unzip dest="${build.dir}/dtest" overwrite="false"> |
| <fileset dir="${test.lib}/jars" includes="jimfs-1.1.jar,dtest-api-*.jar,asm-*.jar,javassist-*.jar,reflections-*.jar,semver4j-*.jar"/> |
| <patternset excludes="META-INF/license/**"/> |
| </unzip> |
| <unzip dest="${build.dir}/dtest" overwrite="false"> |
| <fileset dir="${build.dir.lib}/jars" includes="*.jar"/> |
| <patternset excludes="META-INF/license/**"/> |
| </unzip> |
| |
| <jar jarfile="${build.dir}/dtest-${base.version}.jar" duplicate="preserve"> |
| <fileset dir="${build.dir}/dtest"> |
| <exclude name="META-INF/*.SF"/> |
| <exclude name="META-INF/*.DSA"/> |
| <exclude name="META-INF/*.RSA"/> |
| <exclude name="META-INF/license/**"/> |
| </fileset> |
| </jar> |
| |
| <delete dir="${build.dir}/dtest" quiet="true"/> |
| </target> |
| |
| <target name="test-jvm-dtest" depends="maybe-build-test" description="Execute in-jvm dtests"> |
| <testmacro inputdir="${test.distributed.src}" timeout="${test.distributed.timeout}" forkmode="once" showoutput="true" filter="**/test/${test.name}.java"> |
| <jvmarg value="-Dlogback.configurationFile=test/conf/logback-dtest.xml"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=10000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacro> |
| </target> |
| |
| <property name="simulator.asm.print" value="none"/> <!-- Supports: NONE, CLASS_SUMMARY, CLASS_DETAIL, METHOD_SUMMARY, METHOD_DETAIL, ASM; see org.apache.cassandra.simulator.asm.MethodLogger.Level --> |
| <target name="test-simulator-dtest" depends="maybe-build-test" description="Execute simulator dtests"> |
| <testmacro inputdir="${test.simulator-test.src}" timeout="${test.simulation.timeout}" forkmode="perTest" showoutput="true" filter="**/test/${test.name}.java"> |
| <jvmarg value="-Dlogback.configurationFile=test/conf/logback-simulator.xml"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=10000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| <jvmarg value="-Dcassandra.debugrefcount=false"/> |
| <jvmarg value="-Dcassandra.test.simulator.determinismcheck=strict"/> |
| <jvmarg value="-Dcassandra.test.simulator.print_asm=${simulator.asm.print}" /> |
| <!-- Support Simulator Tests --> |
| <jvmarg line="-javaagent:${test.lib}/jars/simulator-asm.jar"/> |
| <jvmarg line="-Xbootclasspath/a:${test.lib}/jars/simulator-bootstrap.jar"/> |
| <jvmarg line="-XX:ActiveProcessorCount=4"/> |
| <jvmarg line="-XX:-TieredCompilation"/> |
| <jvmarg line="-XX:-BackgroundCompilation"/> |
| <jvmarg line="-XX:CICompilerCount=1"/> |
| <jvmarg line="-XX:Tier4CompileThreshold=1000"/> |
| <jvmarg line="-XX:ReservedCodeCacheSize=256M"/> |
| <jvmarg line="-Xmx8G"/> |
| </testmacro> |
| </target> |
| |
| <!-- To run them you'll need to: |
| - `ant dtest-jar` on each version involved, including your current feature branch |
| - copy the build/dtest-*.jar for each version into your feature branch build folder |
| - You can use 'test-jvm-dtest-some' if you only need to run one --> |
| <target name="test-jvm-upgrade-dtest" depends="maybe-build-test" description="Execute in-jvm dtests"> |
| <testmacro inputdir="${test.distributed.src}" timeout="${test.distributed.timeout}" forkmode="once" showoutput="true" filter="**/upgrade/*Test.java"> |
| <jvmarg value="-Dlogback.configurationFile=test/conf/logback-dtest.xml"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=10000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacro> |
| </target> |
| |
| <!-- Use this with an FQDN for test class or upgrade test, and an optional csv list of methods like this: |
| ant test-jvm-dtest-some -Dtest.name=org.apache.cassandra.distributed.test.ResourceLeakTest |
| ant test-jvm-dtest-some -Dtest.name=org.apache.cassandra.distributed.test.ResourceLeakTest -Dtest.methods=looperTest |
| --> |
| <target name="test-jvm-dtest-some" depends="maybe-build-test" description="Execute some in-jvm dtests"> |
| <testmacro inputdir="${test.distributed.src}" timeout="${test.distributed.timeout}" forkmode="once" showoutput="true"> |
| <test unless:blank="${test.methods}" name="${test.name}" methods="${test.methods}" todir="${build.test.dir}/output/" outfile="TEST-${test.name}-${test.methods}"/> |
| <test if:blank="${test.methods}" name="${test.name}" todir="${build.test.dir}/output/" outfile="TEST-${test.name}"/> |
| <jvmarg value="-Dlogback.configurationFile=test/conf/logback-dtest.xml"/> |
| <jvmarg value="-Dcassandra.ring_delay_ms=10000"/> |
| <jvmarg value="-Dcassandra.tolerate_sstable_size=true"/> |
| <jvmarg value="-Dcassandra.skip_sync=true" /> |
| </testmacro> |
| </target> |
| |
| <target name="generate-unified-test-report" description="Merge all unit xml files into one, generate html pages, and print summary test numbers"> |
| <junitreport todir="${build.dir}"> |
| <fileset dir="${build.test.dir}/output"> |
| <include name="**/TEST*.xml"/> |
| <include name="**/cqlshlib.xml"/> |
| <include name="**/nosetests.xml"/> |
| </fileset> |
| <!-- FIXME this can easily OOM, need a workaround--> |
| <report todir="${build.test.dir}/html" /> |
| </junitreport> |
| <!-- concat the report through a filter chain to extract what you want --> |
| <concat> |
| <fileset file="${build.test.dir}/html/overview-summary.html" /> |
| <filterchain> |
| <linecontainsregexp> |
| <regexp pattern='title="Display all tests"' /> |
| </linecontainsregexp> |
| <tokenfilter> |
| <!-- escaped values of < and > are ">" and "<" --> |
| <replaceregex pattern='.*all tests.*>(\d+)<.*all failures.*>(\d+)<.*all errors.*>(\d+)<.*all skipped test.*>(\d+)<.*$' replace="[Test Summary] Run: \1, Failed: \2, Errors: \3, Skipped: \4" /> |
| </tokenfilter> |
| </filterchain> |
| </concat> |
| </target> |
| |
| <target name="microbench" depends="jar"> |
| <antcall target="-microbench" inheritrefs="true"/> |
| </target> |
| |
| <target name="microbench-with-profiler" depends="jar"> |
| <antcall target="-microbench-with-profiler" inheritrefs="true"/> |
| </target> |
| |
| <!-- run arbitrary mains in tests, for example to run the long running memory tests with lots of memory pressure |
| ant run-main -Dmainclass=org.apache.cassandra.utils.memory.LongBufferPoolTest -Dvmargs="-Xmx30m -XX:-UseGCOverheadLimit" |
| --> |
| <target name="run-main" depends="maybe-build-test"> |
| <property name="mainclass" value="" /> |
| <property name="vmargs" value="" /> |
| <property name="args" value="" /> |
| <java classname="${mainclass}" |
| fork="true" |
| failonerror="true"> |
| <jvmarg value="-server" /> |
| <jvmarg value="-ea" /> |
| <jvmarg line="${vmargs}" /> |
| <arg line="${args}" /> |
| <classpath> |
| <path refid="cassandra.classpath" /> |
| <pathelement location="${test.classes}"/> |
| <pathelement location="${test.conf}"/> |
| <fileset dir="${test.lib}"> |
| asm-<include name="**/*.jar" /> |
| </fileset> |
| </classpath> |
| </java> |
| </target> |
| |
| <target name="_maybe_update_idea_to_java11plus" depends="init"> |
| <replace file="${eclipse.project.name}.iml" token="JDK_11" value="JDK_${ant.java.version}"/> |
| <replace file=".idea/misc.xml" token="JDK_11" value="JDK_${ant.java.version}"/> |
| <replace file=".idea/misc.xml" token="11" value="${ant.java.version}"/> |
| <replaceregexp file=".idea/workspace.xml" |
| match="name="VM_PARAMETERS" value="(.*)" |
| replace="name="VM_PARAMETERS" value="\1 ${java-jvmargs} ${_std-test-jvmargs}" |
| byline="true"/> |
| |
| <echo file=".idea/compiler.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> |
| <project version="4"> |
| <component name="JavacSettings"> |
| <option name="ADDITIONAL_OPTIONS_STRING" value="--add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED |
| --add-exports java.rmi/sun.rmi.transport=ALL-UNNAMED |
| --add-exports java.rmi/sun.rmi.transport.tcp=ALL-UNNAMED |
| --add-exports java.base/jdk.internal.ref=ALL-UNNAMED |
| --add-exports java.base/sun.nio.ch=ALL-UNNAMED" /> |
| </component> |
| </project>]]></echo> |
| </target> |
| |
| <!-- Generate IDEA project description files --> |
| <target name="generate-idea-files" depends="init,resolver-dist-lib,gen-cql3-grammar,generate-jflex-java,_createVersionPropFile" description="Generate IDEA files"> |
| <delete dir=".idea"/> |
| <delete file="${eclipse.project.name}.iml"/> |
| <mkdir dir=".idea"/> |
| <mkdir dir=".idea/libraries"/> |
| <copy todir=".idea" overwrite="true"> |
| <fileset dir="ide/idea"/> |
| </copy> |
| <replace file=".idea/workspace.xml" token="trunk" value="${eclipse.project.name}"/> |
| <replace file=".idea/workspace.xml" token="-Dcassandra.use_nix_recursive_delete=true" value="-Dcassandra.use_nix_recursive_delete=${cassandra.use_nix_recursive_delete}"/> |
| <copy tofile="${eclipse.project.name}.iml" file="ide/idea-iml-file.xml"/> |
| <echo file=".idea/.name">Apache Cassandra ${eclipse.project.name}</echo> |
| <echo file=".idea/modules.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> |
| <project version="4"> |
| <component name="ProjectModuleManager"> |
| <modules> |
| <module fileurl="file://$PROJECT_DIR$/]]>${eclipse.project.name}<![CDATA[.iml" filepath="$PROJECT_DIR$/]]>${eclipse.project.name}<![CDATA[.iml" /> |
| </modules> |
| </component> |
| </project>]]></echo> |
| <antcall target="_maybe_update_idea_to_java11plus"/> |
| <echo> |
| IDE configuration in .idea/ updated for use with JDK${ant.java.version}. |
| |
| In IntelliJ verify that the SDK is ${ant.java.version}, and its path is valid. |
| This can be verified in 'Project Structure/Project Setting/Project' and 'Project Structure/Platform Setting/SDKs'. |
| </echo> |
| </target> |
| |
| <!-- Generate Eclipse project description files --> |
| <target name="generate-eclipse-files" depends="build-test" 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> |
| <path id="eclipse-project-libs-path"> |
| <fileset dir="lib"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <fileset dir="${build.dir.lib}/jars"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <fileset dir="${test.lib}/jars"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </path> |
| <pathconvert property="eclipse-libs-list" refid="eclipse-project-libs-path" pathsep="${line.separator}"> |
| <mapper> |
| <regexpmapper from="^(.*)$$" to='<classpathentry kind="lib" path="\1\" \/>'/> |
| </mapper> |
| </pathconvert> |
| <property name="eclipse-project-libs" refid="eclipse-project-libs-path"/> |
| <echo file=".classpath"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> |
| <classpath> |
| <classpathentry kind="src" path="src/java"/> |
| <classpathentry kind="src" path="src/resources"/> |
| <classpathentry kind="src" path="src/gen-java"/> |
| <classpathentry kind="src" path="conf" including="hotspot_compiler"/> |
| <classpathentry kind="src" output="${test.classes}" path="test/unit"/> |
| <classpathentry kind="src" output="${test.classes}" path="test/long"/> |
| <classpathentry kind="src" output="${test.classes}" path="test/distributed"/> |
| <classpathentry kind="src" output="${test.classes}" path="test/simulator/asm"/> |
| <classpathentry kind="src" output="${test.classes}" path="test/simulator/main"/> |
| <classpathentry kind="src" output="${test.classes}" path="test/resources" /> |
| <classpathentry kind="src" path="tools/stress/src"/> |
| <classpathentry kind="src" path="tools/fqltool/src"/> |
| <classpathentry kind="src" output="build/test/stress-classes" path="tools/stress/test/unit" /> |
| <classpathentry kind="src" output="build/test/fqltool-classes" path="tools/fqltool/test/unit" /> |
| <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> |
| <classpathentry kind="output" path="build/classes/eclipse"/> |
| <classpathentry kind="lib" path="test/conf"/> |
| <classpathentry kind="lib" path="${java.home}/../lib/tools.jar"/> |
| ${eclipse-libs-list} |
| </classpath> |
| ]]> |
| </echo> |
| <taskdef name="echoeclipseprojectslibs" classname="org.apache.cassandra.anttasks.EchoEclipseProjectLibs" classpath="${test.classes}"> |
| <classpath> |
| <path refid="cassandra.classpath"/> |
| <path refid="cassandra.classpath.test"/> |
| </classpath> |
| </taskdef> |
| <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> |
| |
| <!-- Empty fake task until we remove it from Jenkins. eclipse-warnings removed in favor of using CheckerFramework |
| For more information - CASSANDRA-18190 and CASSANDDRA-18239--> |
| <target name="eclipse-warnings" depends="build" description="Run eclipse compiler code analysis" if="java.version.8"> </target> |
| |
| <!-- Installs artifacts to local Maven repository --> |
| <target name="mvn-install" |
| depends="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 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> |
| |
| <!-- Publish artifacts to remote Maven repository --> |
| <target name="publish" |
| depends="mvn-install,artifacts" |
| 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 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"/> |
| |
| <!-- the distribution --> |
| <sign-dist file="${build.dir}/${final.name}-bin.tar.gz" /> |
| <sign-dist file="${build.dir}/${final.name}-src.tar.gz" /> |
| |
| </target> |
| |
| <import file="${build.helpers.dir}/build-resolver.xml"/> |
| <import file="${build.helpers.dir}/build-rat.xml"/> |
| <import file="${build.helpers.dir}/build-owasp.xml"/> |
| <import file="${build.helpers.dir}/build-git.xml"/> |
| <import file="${build.helpers.dir}/build-checkstyle.xml"/> |
| <import file="${build.helpers.dir}/build-cqlsh.xml"/> |
| <import file="${build.helpers.dir}/build-bench.xml"/> |
| </project> |