| <!-- |
| - |
| - 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 xmlns:ivy="antlib:org.apache.ivy.ant" name="common"> |
| |
| <dirname property="project.root" file="${ant.file.common}"/> |
| |
| <property name="project.name" value="qpid"/> |
| <!-- Version used for standard build output --> |
| <property name="project.version" value="0.24"/> |
| <!-- The release version used for maven output. SNAPSHOT added via maven.version.suffix --> |
| <property name="project.version.maven" value="0.24"/> |
| <property name="project.url" value="http://qpid.apache.org"/> |
| <property name="project.groupid" value="org.apache.qpid"/> |
| <property name="project.namever" value="${project.name}-${project.version}"/> |
| |
| <property name="resources" location="${project.root}/resources"/> |
| <property name="test.profiles" location="${project.root}/test-profiles"/> |
| <property name="build" location="${project.root}/build"/> |
| <property name="build.scratch" location="${build}/scratch"/> |
| <property name="build.bin" location="${build}/bin"/> |
| <property name="build.etc" location="${build}/etc"/> |
| <property name="build.lib" location="${build}/lib"/> |
| <property name="build.api" location="${build}/api"/> |
| <property name="build.test.api" location="${build}/test-api"/> |
| <property name="build.results" location="${build}/results"/> |
| <property name="build.failed" location="${build.results}/FAILED"/> |
| <property name="build.report" location="${build}/report"/> |
| <property name="build.release" location="${build}/release"/> |
| <property name="build.release.prepare" location="${build.release}/prepare"/> |
| <property name="build.scratch.broker.plugins.lib" location="${build.scratch}/broker-plugins/lib"/> |
| <property name="build.coverage.report" location="${build}/coverage/report"/> |
| <property name="build.coverage.src" location="${build}/coverage/src"/> |
| <property name="build.findbugs" location="${build}/findbugs"/> |
| |
| <property name="java.target" value="1.5"/> |
| <property name="java.source" value="1.5"/> |
| |
| <property name="release" location="${project.root}/release"/> |
| |
| <property name="tasks" location="${project.root}/tasks"/> |
| <property name="tasks.classes" location="${tasks}/classes"/> |
| <property name="tasks.src" location="${tasks}/src"/> |
| |
| <property name="qpid.home" location="${project.root}/build"/> |
| <property name="qpid.work" location="${qpid.home}/work"/> |
| |
| <property name="javac.compiler.args" value=""/> |
| |
| <property name="cobertura.dir" value="${project.root}/lib/cobertura" /> |
| <property name="cobertura.version" value="1.9.4.1" /> |
| |
| <path id="cobertura.classpath"> |
| <fileset dir="${cobertura.dir}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </path> |
| |
| <property name="mllib.dir" value="${project.root}/../python" /> |
| <property name="findbugs.dir" value="${project.root}/lib/findbugs" /> |
| |
| <!-- properties used to control Ant Eclipse for Eclipse classpath/project files etc --> |
| <property name="eclipse.updatealways" value="false"/> |
| <property name="eclipse.compilercompliance" value="5.0"/> |
| <property name="eclipse.container" value="JVM 1.5"/> |
| |
| <!-- properties for generating the maven artifacts --> |
| <property name="maven.local.repo" value="${build.scratch}/maven-local-repo"/> |
| <property name="maven.settings.xml" value="${project.root}/maven-settings.xml"/> |
| <property name="maven.unique.version" value="false"/> |
| <property name="maven.snapshot" value="true"/> |
| <condition property="maven.version.suffix" value="" else="-SNAPSHOT"> |
| <isfalse value="${maven.snapshot}"/> |
| </condition> |
| |
| <!-- properties for uploading our Maven artifacts to Nexus using Ivy --> |
| <property name="ivy.organisation" value="org/apache"/> |
| <property name="nexus.organisation" value="org.apache"/> |
| <property name="nexus.host" value="repository.apache.org"/> |
| <property name="nexus.upload.url" value="https://${nexus.host}/service/local/staging/deploy/maven2"/> |
| |
| <!-- properties for deplying snapshot artifacts --> |
| <property name="maven.snapshots.repo.id" value="apache.snapshots.https"/> |
| <property name="maven.snapshots.repo.url" value="https://${nexus.host}/content/repositories/snapshots"/> |
| |
| <!-- properties for downloading ivy, and then our dependencies --> |
| <property name="ivy.jar.dir" value="${project.root}/lib/ivy" /> |
| <property name="ivy.install.version" value="2.2.0" /> |
| <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy-${ivy.install.version}.jar" /> |
| <property name="ivy.m2repo.url" value="http://repo1.maven.org/maven2"/> |
| <property name="ivy.repo.url" value="${ivy.m2repo.url}/org/apache/ivy/ivy"/> |
| <property name="ivy.jar.url" value="${ivy.repo.url}/${ivy.install.version}/ivy-${ivy.install.version}.jar"/> |
| |
| <available property="ivy.jar.file.exists" file="${ivy.jar.file}"/> |
| <property name="retrieve.dependencies" value="true" /> |
| <property name="optional.dependencies" value="false" /> |
| |
| <condition property="dont.download.ivy"> |
| <!-- Set prop to stop Ivy download if asked not to retrieve |
| the dependencies, or the ivy jar is already present --> |
| <or> |
| <isfalse value="${retrieve.dependencies}"/> |
| <and> |
| <isset property="ivy.jar.file.exists"/> |
| <istrue value="${ivy.jar.file.exists}"/> |
| </and> |
| </or> |
| </condition> |
| |
| <condition property="ivy.dont.retrieve"> |
| <isfalse value="${retrieve.dependencies}"/> |
| </condition> |
| <condition property="ivy.configured"> |
| <isfalse value="${retrieve.dependencies}"/> |
| </condition> |
| <condition property="ivy.retrieve.optional"> |
| <and> |
| <istrue value="${retrieve.dependencies}"/> |
| <or> |
| <istrue value="${optional.dependencies}"/> |
| <istrue value="${optional}"/> |
| </or> |
| </and> |
| </condition> |
| |
| |
| <macrodef name="indirect"> |
| <attribute name="name"/> |
| <attribute name="variable"/> |
| <sequential> |
| <property name="@{name}" value="${@{variable}}"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="echo-path"> |
| <attribute name="refid"/> |
| <sequential> |
| <property name="@{refid}" refid="@{refid}"/> |
| <echo message="@{refid} = ${@{refid}}"/> |
| <pathconvert property="@{refid}.pretty" |
| refid="@{refid}" |
| pathsep="${line.separator} |-- "/> |
| <echo message="@{refid}.pretty =${line.separator} |-- ${@{refid}.pretty}"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="echo-prop"> |
| <attribute name="name"/> |
| <sequential> |
| <echo message="@{name} = ${@{name}}"/> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="findSubProjects"> |
| <attribute name="dir"/> |
| <attribute name="name"/> |
| <attribute name="excludes" default=""/> |
| |
| <sequential> |
| <dirset id="@{dir}.refid" dir="@{dir}" excludes="@{excludes}"> |
| <present targetdir="@{dir}"> |
| <mapper type="glob" from="*" to="*/build.xml" /> |
| </present> |
| </dirset> |
| |
| <pathconvert property="@{name}" |
| refid="@{dir}.refid" |
| pathsep=" "> |
| <map from="${project.root}/" to=""/> |
| </pathconvert> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="jython"> |
| <attribute name="path"/> |
| <element name="args"/> |
| <sequential> |
| <java jar="${project.root}/${jython}" fork="true" failonerror="true"> |
| <arg value="-Dpython.path=@{path}"/> |
| <args/> |
| </java> |
| </sequential> |
| </macrodef> |
| |
| <mkdir dir="${tasks.classes}"/> |
| <javac source="${java.source}" target="${java.target}" srcdir="${tasks.src}" destdir="${tasks.classes}" classpath="${java.class.path}" includeantruntime="false"> |
| <compilerarg line="${javac.compiler.args}"/> |
| </javac> |
| |
| |
| <typedef name="propertymapper" classname="org.apache.qpid.tasks.PropertyMapper" |
| classpath="${tasks.classes}"/> |
| |
| <taskdef name="map" classname="org.apache.qpid.tasks.Map" |
| classpath="${tasks.classes}"/> |
| <taskdef name="foreach" classname="org.apache.qpid.tasks.Foreach" |
| classpath="${tasks.classes}"/> |
| |
| <macrodef name="copylist"> |
| <attribute name="todir"/> |
| <attribute name="dir"/> |
| <attribute name="files"/> |
| <sequential> |
| <foreach property="file" list="@{files}"> |
| <copy todir="@{todir}" flatten="true"> |
| <fileset dir="@{dir}" includes="${file}"/> |
| </copy> |
| </foreach> |
| </sequential> |
| </macrodef> |
| |
| <macrodef name="copytofile"> |
| <attribute name="tofile"/> |
| <attribute name="dir"/> |
| <attribute name="include"/> |
| <attribute name="failOnError" default="false"/> |
| <sequential> |
| <copy tofile="@{tofile}" failOnError="@{failOnError}"> |
| <fileset dir="@{dir}"> |
| <include name="@{include}"/> |
| </fileset> |
| </copy> |
| </sequential> |
| </macrodef> |
| |
| |
| <target name="clean-tasks"> |
| <delete dir="${tasks.classes}"/> |
| </target> |
| |
| <target name="clean-results"> |
| <delete dir="${build.results}"/> |
| </target> |
| |
| <target name="report" description="generate test report"> |
| <delete dir="${build.report}"/> |
| <mkdir dir="${build.report}"/> |
| <junitreport todir="${build.report}"> |
| <fileset dir="${build.results}"> |
| <include name="**/TEST-*.xml"/> |
| </fileset> |
| <report todir="${build.report}"/> |
| </junitreport> |
| </target> |
| |
| <target name="cobertura-init"> |
| <taskdef classpathref="cobertura.classpath" resource="tasks.properties" /> |
| </target> |
| |
| <target name="findbugs-init"> |
| |
| <mkdir dir="${findbugs.dir}"/> |
| <!-- Hack to make the FindBugs jars retrieved using Ivy work with the Ant Task, |
| because it expects certain jar names without versions like in the .zip release --> |
| <copytofile tofile="${findbugs.dir}/findbugs.jar" dir="${findbugs.dir}" include="findbugs-?.*.*.jar"/> |
| <copytofile tofile="${findbugs.dir}/findbugs-ant.jar" dir="${findbugs.dir}" include="findbugs-ant-?.*.*.jar"/> |
| <copytofile tofile="${findbugs.dir}/bcel.jar" dir="${findbugs.dir}" include="bcel-*.jar"/> |
| <copytofile tofile="${findbugs.dir}/annotations.jar" dir="${findbugs.dir}" include="annotations-?.*.*.jar"/> |
| <copytofile tofile="${findbugs.dir}/jsr305.jar" dir="${findbugs.dir}" include="jsr305-*.jar"/> |
| <copytofile tofile="${findbugs.dir}/jFormatString.jar" dir="${findbugs.dir}" include="jFormatString-*.jar"/> |
| |
| <available file="${findbugs.dir}/findbugs-ant.jar" property="findbugs-ant.jar.present"/> |
| <fail unless="findbugs-ant.jar.present" message="FindBugs was not found. Please add -Doptional.dependencies=true to your build command to retrieve FindBugs"/> |
| |
| <taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpath="${findbugs.dir}/findbugs-ant.jar"/> |
| </target> |
| |
| |
| <!-- targets for downloading ivy and retrieving dependencies --> |
| <target name="retrieve-dependencies" depends="load-ivy, configure-ivy, retrieve-optional-dependencies" unless="${ivy.dont.retrieve}"> |
| <echo message="Resolving and retrieving dependencies..."/> |
| <ivy:resolve type="jar,bundle,war" file="${project.root}/ivy.retrieve.xml" conf="required"/> |
| <ivy:retrieve type="jar,bundle,war" conf="required" sync="true" |
| pattern="${project.root}/lib/required/[artifact]-[revision].[ext]" /> |
| </target> |
| |
| <target name="retrieve-optional-dependencies" if="${ivy.retrieve.optional}"> |
| <echo message="Resolving and retrieving optional dependencies..."/> |
| <ivy:resolve type="jar" file="${project.root}/ivy.retrieve.xml" conf="findbugs"/> |
| <ivy:retrieve type="jar" conf="findbugs" sync="true" |
| pattern="${findbugs.dir}/[artifact]-[revision].[ext]" /> |
| |
| <ivy:resolve type="jar" file="${project.root}/ivy.retrieve.xml" conf="cobertura"/> |
| <ivy:retrieve type="jar" conf="cobertura" sync="true" |
| pattern="${cobertura.dir}/[artifact]-[revision].[ext]" /> |
| </target> |
| |
| |
| <target name="configure-ivy" unless="${ivy.configured}"> |
| <ivy:configure file="${project.root}/ivysettings.retrieve.xml" override="true"/> |
| <property name="ivy.configured" value="true" /> |
| </target> |
| |
| <target name="load-ivy" depends="download-ivy" unless="${ivy.dont.retrieve}"> |
| <!-- Try to load Ivy from local ivy dir, in case the user has not already dropped it into |
| Ant's lib dir (note that the latter copy will always take precedence). Won't |
| fail so long as Ivy is in at least one of the locations. --> |
| <mkdir dir="${ivy.jar.dir}"/> |
| <path id="ivy.lib.path"> |
| <fileset dir="${ivy.jar.dir}" includes="*.jar"/> |
| </path> |
| <taskdef resource="org/apache/ivy/ant/antlib.xml" |
| uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/> |
| </target> |
| |
| <target name="download-ivy" unless="${dont.download.ivy}"> |
| <mkdir dir="${ivy.jar.dir}"/> |
| <echo message="Downloading ivy..."/> |
| <get src="${ivy.jar.url}" dest="${ivy.jar.file}" usetimestamp="true"/> |
| </target> |
| |
| |
| <target name="help" description="display detailed build documentation"> |
| <echo> |
| ant build |
| |
| This target compiles all sources, creates java archives, and |
| copies scripts and configurations into the build directory: |
| |
| ${build} |
| |
| The build directory is treated as a live distro which this target |
| will incrementally update. Developers can put the build/bin |
| directory into their path in order to run any scripts or code |
| directly out of the live build: |
| |
| ${build.bin} |
| |
| ant test [ -Dtest=<pattern> ] [-Dprofile=<profile>] [ report ] |
| |
| Execute unit tests and place the output in the build results |
| directory: |
| |
| ${build.results} |
| |
| All test output will be redirected to a file of the form: |
| |
| TEST-<class>.txt |
| |
| The same output is available using an xml file format: |
| |
| TEST-<class>.xml |
| |
| The test system property may be used to restrict the number of |
| tests run by a given invocation of the ant test target. The |
| following command will run just the MongooseTest test case: |
| |
| ant test -Dtest=MongooseTest |
| |
| In addition, patterns may be used to specify more than one test. |
| The following command will run both the MongooseTest and GooseTest |
| test cases: |
| |
| ant test -Dtest=*ooseTest |
| |
| If no test property is specified, the "ant test" target will |
| default to running all available tests for the project or module |
| depending on the current working directory. |
| |
| Test Reports |
| |
| It can be useful to append the report target in order to |
| generate an html summary of the tests that were just run. The |
| following command will run both the MongooseTest and GooseTest |
| test cases and generate an html summary of the results: |
| |
| ant test -Dtest=*ooseTest report |
| |
| See the documentation for the "ant report" target for more details |
| on the generated report. |
| |
| Test Profiles |
| |
| There are a number of profiles defined for running the test suite. |
| These test profiles define how the test should be run. If the test |
| profile is not specified then 'default.testprofile' is utilised. |
| This runs the system tests against the Java InVM broker. Additional |
| test profiles exists as follows: |
| |
| cpp : Runs against the built cpp tree broker. |
| |
| ant report |
| |
| The report target will generate an html summary of the current |
| test results into the report directory: |
| |
| ${build.report} |
| |
| The report target will operate on all results currently in the |
| build results directory. Results are not cleared unless the clean |
| target is used. This means that several consecutive test runs can |
| be summarized into a single report. The following commands will |
| produce a report summarizing both the MongooseTest and GooseTest |
| test cases: |
| |
| ant test -Dtest=MongooseTest |
| ... |
| ant test -Dtest=GooseTest |
| ... |
| ant report |
| |
| ant release |
| |
| The release target generates binary distribution archives and |
| places them into the release directory: |
| |
| ${release} |
| |
| ant release-bin |
| |
| The release-bin target generates binary distribution archives for |
| modules that have a specific binary package configured. |
| To enable for other modules create a target "release-bin" that |
| depends on target "release-bin-tasks". The output is placed in: |
| |
| ${module.release} |
| |
| ant clean |
| |
| The clean target removes build artifacts. When invoked from the |
| project root this target will remove the entire project build and |
| release directories: |
| |
| ${build} |
| and |
| ${release} |
| and |
| ${module.release} |
| |
| When invoked from a specific module, the clean target will delete |
| that modules build root from underneath the project build root: |
| |
| ${build}/<module> |
| |
| ant clean-results |
| |
| The clean-results target removes all test output from the test |
| results directory: |
| |
| ${build.results} |
| |
| ant eclipse |
| |
| Generates project and classpath files for the Eclispe IDE. Requires that |
| the Ant Eclipse task (http://ant-eclipse.sourceforge.net/) has been installed |
| in $ANT_HOME/lib. |
| |
| The following system properties will be passed to the task. These can be usefully |
| overridden from the command line. |
| |
| eclipse.updatealways - forces Eclipse files to be regenerated even if they are newer then the build.xml (default ${eclipse.updatealways}). |
| eclipse.container - controls the Eclipse container (default ${eclipse.container}). |
| eclipse.compilercompliance" - controls the Eclipse compiler compliance (default ${eclipse.compilercompliance}). |
| |
| </echo> |
| </target> |
| |
| </project> |