| <!--=========================================================================== |
| Copyright (c) 2008-2009, Pentaho Engineering Team |
| All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions are met: |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| * Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in the |
| documentation and/or other materials provided with the distribution. |
| * Neither the name of the Pentaho Corporation nor the |
| names of its contributors may be used to endorse or promote products |
| derived from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY Pentaho Engineering Team ''AS IS'' AND ANY |
| EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
| WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY |
| DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
| (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
| LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
| ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| ============================================================================--> |
| <!--=========================================================================== |
| == SUBFLOOR == |
| |
| $Date: Wed Nov 6 16:13:57 UTC 2013 $ |
| Project Home: https://github.com/pentaho/subfloor/ |
| |
| This file contains the default implementation of the ant tasks to |
| perform a build. This file should be included by the build.xml file |
| for your particular project. That build file should redefine any task |
| that is defined in subfloor.xml IF AND ONLY IF the function of the |
| task needs to be customized. |
| |
| FORMATTING: |
| ALIGNMENT: indent=2 spaces and wrap lines longer than 120 chars |
| NAMING: targets intended for execution by a user are named single-word |
| or hyphenated. Internal targets use '.' notation. |
| |
| TO GET STARTED with your project, you will need this file in |
| your project's root directory along with three additional files: |
| 1. build.xml |
| 2. build.properties |
| 3. ivy_settings.xml |
| 4. ivy.xml |
| |
| Below are some templates: |
| |
| === build.xml |
| <project name="MyProject" basedir="." default="jar" xmlns:ivy="antlib:org.apache.ivy.ant" > |
| <description> |
| This build file is used to create the MyProject project and works with the subfloor.xml file. |
| </description> |
| |
| <import file="subfloor.xml"/> |
| </project> |
| |
| === build.properties |
| project.revision=1.0-SNAPSHOT #the version of your project. This will appear in jar META-INF, dist artifact filenames and IVY revision metadata. |
| ivy.artifact.id=my-project #IVY metadata describing the name of the artifact |
| impl.title=My Project #English language version of your project name |
| |
| ============================================================================--> |
| |
| |
| <project name="subfloor" basedir="." default="default" xmlns:ivy="antlib:org.apache.ivy.ant"> |
| <description> |
| ------------------------------------------------------------------------------- |
| subfloor.xml provides tasks needed to perform a project build. |
| It is typically not used directly but imported by each project's build.xml |
| file. The build.xml file can override tasks when customization is required. |
| |
| MAIN TARGETS |
| ============ |
| * clean / clean-all : |
| remove all artifacts of the build, clean-all adds the removal |
| of any library or jar dependencies downloaded as part of the build |
| |
| * resolve : |
| download/refresh library or jar dependencies needed for the build (uses Apache IVY) |
| |
| * compile : |
| run javac on the project's source |
| |
| * jar : |
| creates a jar file |
| |
| * dist : |
| creates all project distributables |
| |
| * test : |
| runs JUnit tests from your project's test source |
| |
| SPECIAL TARGETS |
| ============ |
| * publish-local : |
| builds a jar for your project and registers it with the local artifact repository isolated |
| to your machine at $HOME/.ivy2/local. Further executions of the the resolve target by this |
| or other projects will find your published jar. |
| |
| * ivy-clean* : |
| this family of targets helps reset your IVY environment in the event that you are having |
| difficulty resolving dependencies |
| |
| TYPICAL TARGET SEQUENCE |
| ============ |
| * clean-all resolve dist : |
| a good start to build all project distributables from scratch. Note that jar dependencies |
| will not be downloaded unless you explicitly run the resolve target. We made the resolution |
| and retrieval completely discretionary since there are many situations in which |
| you will not want to get or refresh dependencies, e.g. if you are offline with no Internet |
| access. In such case, you could just run "dist" if the set of jars you already have are |
| sufficient. |
| |
| </description> |
| |
| <!-- Load the properties files in the proper order --> |
| <property file="override.properties" |
| description="Properties customized for your development environment belong in this file. This file will never be checked into the SCM." /> |
| <property file="build.properties" |
| description="Properties customized for your particular project belong in this file." /> |
| |
| <!-- ================================================================================= |
| Property Defaults |
| Any of these properties can be overridden in either build.properties or override.properties |
| =================================================================================--> |
| |
| <!-- Project meta properties --> |
| <property name="impl.vendor" value="Pentaho Corporation" description="Jar file metadata describing the jar's vendor" /> |
| <property name="impl.productID" |
| value="" |
| description="Jar file metadata indicating the product ID (this is not the revision)" /> |
| |
| <!-- Compile properties --> |
| <property name="src.dir" value="${basedir}/src" description="Project source code directory" /> |
| <property name="bin.dir" value="${basedir}/bin" description="Base directory for all non-dist build output" /> |
| <property name="classes.dir" |
| value="${bin.dir}/classes" |
| description="Classes compiled from project source code are placed here" /> |
| <property name="lib.dir" |
| value="${basedir}/lib" |
| description="Directory that hosts Jar files required to compile project source. (IVY will populate this directory with required jars)" /> |
| <property name="devlib.dir" |
| value="${basedir}/dev-lib" |
| description="Directory for developer to place development Jar files (not affected by clean targets)" /> |
| |
| <!-- Compiler properties (passed directly to javac ant target) --> |
| <property name="javac.debug" |
| value="true" |
| description="Indicates whether source should be compiled with debug information (passed to javac ant task)." /> |
| <property name="javac.deprecation" |
| value="true" |
| description="Indicates whether source should be compiled with deprecation information" /> |
| <property name="javac.source" value="6" description="Provide source compatibility with specified release" /> |
| <property name="javac.target" value="6" description="Generate class files for specific VM version" /> |
| <property name="javac.maxmemory" value="256M" description="Max memory alloted to java compile" /> |
| <property name="javac.xlint" value="-Xlint:all" /> |
| |
| <!-- Third party Ant tasks and tools properties --> |
| <property name="subfloor.resources.dir" |
| value="${user.home}/.subfloor" |
| description="Base dir for runtime jars that are required exclusively by the build process" /> |
| <property name="subfloor.tmp.dir" |
| value="${subfloor.resources.dir}/tmp" |
| description="Temporary space where files are prepared for installation" /> |
| <property name="antcontrib.build.cache.dir" |
| value="${subfloor.resources.dir}/ant-contrib" |
| description="Directory where the Ant-Contrib jar (and dependencies) is placed after it is auto-downloaded by the build" /> |
| <property name="svnant.use-javahl" |
| value="false" |
| description="Prefer JNI JavaHL binding over the command line client for native svn support" /> |
| <property name="svnant.use-svnkit" |
| value="true" |
| description="Prefer SVNKit binding over the command line client for native svn support (defaults to true)" /> |
| <property name="ivy.url" |
| value="http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar" |
| description="The URL to the current release of Apache IVY" /> |
| |
| <!-- Enunciate properties --> |
| <property name="enunciate.home" value="${basedir}/enunciate" /> |
| <property name="enunciate.bin.dir" value="${bin.dir}/enunciate" /> |
| |
| |
| <!-- Test properties --> |
| <property name="junit.base.dir" value="${basedir}" description="Directory in which the junit test VM will be invoked" /> |
| <property name="testsrc.dir" value="${basedir}/test-src" description="Directory that hosts the test source files" /> |
| <property name="testlib.dir" |
| value="${basedir}/test-lib" |
| description="Directory for jar files needed during unit testing" /> |
| <property name="testbin.dir" |
| value="${bin.dir}/test" |
| description="Base directory for all compiler generated test output" /> |
| <property name="testclasses.dir" |
| value="${testbin.dir}/classes" |
| description="Classes compiled from project test code are placed here" /> |
| <property name="testreports.dir" |
| value="${bin.dir}/reports/test" |
| description="Base directory that holds all unit test report files" /> |
| <property name="testreports.xml.dir" |
| value="${testreports.dir}/xml" |
| description="Unit test xml reports are placed here" /> |
| <property name="testreports.html.dir" |
| value="${testreports.dir}/html" |
| description="Unit test html reports are placed here" /> |
| <property name="junit.haltonfailure" value="no" description="Fail the build if a test fails" /> |
| <property name="junit.haltonerror" value="no" description="Fail the build if a error occurs" /> |
| <property name="junit.maxmemory" value="256M" description="Heap size when Junit is run in fork mode" /> |
| <property name="junit.forkmode" |
| value="perTest" |
| description="Defines whether JUnit forks a new JVM for each test. Use 'once' for faster test runs, and 'perTest' for complete tests."/> |
| <property name="headless.unittest" value="true" description="Runs the unit tests in headless mode" /> |
| |
| <!-- Code Coverage properties --> |
| <property name="instrumented.classes.dir" |
| value="${testbin.dir}/instrumented-classes" |
| description="Directory where instrumented project classes are placed for use by code coverage utility" /> |
| <property name="cobertura.version" |
| value="1.9.4.1" |
| description="The version of cobertura to use for code coverage" /> |
| <property name="cobertura.data.dir" |
| value="${testbin.dir}/cobertura-bin" |
| description="Temporary data directory used by Cobertura" /> |
| <property name="coberturareports.dir" |
| value="${bin.dir}/reports/cobertura" |
| description="Base directory for all generated Cobertura code coverage reports" /> |
| <property name="coberturareports.xml.dir" |
| value="${coberturareports.dir}/xml" |
| description="Cobertura xml reports are placed here" /> |
| <property name="coberturareports.html.dir" |
| value="${coberturareports.dir}/html" |
| description="Cobertura html reports are placed here" /> |
| |
| <!-- Javadoc properties --> |
| <property name="javadoc.dir" |
| value="${bin.dir}/javadoc" |
| description="Directory where generated javadoc will be placed" /> |
| <property name="javadoc.packagenames" |
| value="org.mypackagename.*" |
| description="This property is passed to the packagenames property of the javadoc ant task. You should customize this for your project." /> |
| <property name="javadoc.zip.filename" value="${ivy.artifact.id}-${project.revision}-javadoc.zip" /> |
| <property name="javadoc.tar.filename" value="${ivy.artifact.id}-${project.revision}-javadoc.tar.gz" /> |
| |
| <!-- Distribution and Assembly properties --> |
| <property name="dist.dir" |
| value="${basedir}/dist" |
| description="Base directory for all project artifacts (jar, zip, tar.gz, etc...)" /> |
| <property name="license.dir" |
| value="${basedir}" |
| description="Base directory where this project's license files reside" /> |
| <property name="res.dir" |
| value="${basedir}/res" |
| description="Directory that holds resources not included in the source tree" /> |
| <property name="source.zip.filename" value="${ivy.artifact.id}-${project.revision}-sources.zip" /> |
| <property name="source.tar.filename" value="${ivy.artifact.id}-${project.revision}-sources.tar.gz" /> |
| <property name="source.publish" value="true" /> |
| |
| <!-- Ivy properties --> |
| <property name="ivy.settingsurl" |
| value="file:${basedir}/ivysettings.xml" |
| description="URL to the (common) ivysettings.xml. This file is required by the build to configure IVY. Note you must escape the ':' if this property exists in a .properties file" /> |
| <property name="ivyfile" |
| value="ivy.xml" |
| description="The name of the IVY xml file defining your project's dependencies" /> |
| <property name="ivy.artifact.group" |
| value="mycompanyname" |
| description="IVY metadata describing the originating company or organization" /> |
| <property name="ivy.artifact.pomfile" |
| value="${dist.dir}/pom.xml" |
| description="The path to the Maven pom file to deploy with the artifact" /> |
| <property name="ivy.artifact.ivyfilename" |
| value="ivy.xml" |
| description="The name of the IVY xml file to deploy with the artifact" /> |
| <property name="ivy.artifact.ivypathname" |
| value="${dist.dir}/ivy.xml" |
| description="The full path to the IVY xml file to deploy with the artifact" /> |
| <property name="ivy.reports.dir" |
| value="${bin.dir}/reports/ivy" |
| description="Base directory that holds all IVY dependency report files" /> |
| <property name="ivy.configs" value="*" description="Set of configs used for IVY reporting and checking operations" /> |
| <property name="ivy.use.symlinks" value="true" description="Flag indicating if Ivy should create symlinks when retrieving artifacts."/> |
| |
| <!-- Tattletale properties --> |
| <property name="tattletale.url" |
| value="http://repo.pentaho.org/artifactory/repo/jboss/tattletale/1.1.2.Final/tattletale-1.1.2.Final.zip" |
| description="The URL from which to download tattletale" /> |
| <property name="tattletale.classname" |
| value="org.jboss.tattletale.ant.ReportTask" |
| description="The name of the class which will run the tattletale reports" /> |
| <property name="tattletale.reports.dir" |
| value="${bin.dir}/reports/tattletale" |
| description="Base directory that holds the output of the tattletale reports" /> |
| <property name="tattletale.configfile" |
| value="" |
| description="The configuration file for the tattletale report" /> |
| |
| <!-- Sonar properties --> |
| <property name="sonar.url" |
| value="http://repo1.maven.org/maven2/org/codehaus/sonar-plugins/sonar-ant-task/1.2/sonar-ant-task-1.2.jar"/> |
| <property name="sonar.classname" |
| value="org.sonar.ant.SonarTask"/> |
| |
| <!-- Load the manifest file (if any) as a properties file --> |
| <property name="dist.manifest.file" |
| value="${dist.dir}/MANIFEST.MF" |
| description="The manifest file that will be generated as part of the build" /> |
| <property name="manifest.file" |
| value="${res.dir}/META-INF/MANIFEST.MF" |
| description="The location of the MANIFEST.MF file for this application." /> |
| <property file="${manifest.file}" |
| description="Loads the manifest information from the manifest file as a properties file." /> |
| |
| <!-- Set the project revision number to the value in the manifest file (if it has not |
| been specified in the properties file --> |
| <property name="project.revision" |
| value="${Implementation-Version}" |
| description="Sets the version number of the project based on the Implementation-Version found in the manifest file (if one is supplied and nothing is specified in the build.properties)" /> |
| <fail message="A project revision number has not been determined!"> |
| <condition> |
| <matches string="${project.revision}" pattern="\$\{.*\}" /> |
| </condition> |
| </fail> |
| |
| <!-- Set the project title to the value in the manifest file (if it has not |
| been specified in the properties file --> |
| <property name="impl.title" |
| value="${Implementation-Title}" |
| description="Sets the title of the project based on the Implementation-Title found in the manifest file (if one is supplied and nothing is specified in the build.properties)" /> |
| <fail message="A project title has not been determined!"> |
| <condition> |
| <matches string="${impl.title}" pattern="\$\{.*\}" /> |
| </condition> |
| </fail> |
| |
| <!-- Build Mode properties --> |
| <property name="release" value="false" description="Set this to true if you want to generate a release artifact" /> |
| |
| <!-- Ivy should only use symlinks if we're not in release mode --> |
| <condition property="ivy.use.symlinks.internal"> |
| <and> |
| <isfalse value="${release}"/> |
| <istrue value="${ivy.use.symlinks}"/> |
| </and> |
| </condition> |
| |
| <!-- Set the os property --> |
| <condition property="isLinux"> |
| <os family="unix" /> |
| </condition> |
| <condition property="isWindows"> |
| <os family="windows" /> |
| </condition> |
| <condition property="isMac"> |
| <os family="mac" /> |
| </condition> |
| |
| <condition property="os.classifier" value="win"> |
| <os family="windows" /> |
| </condition> |
| <condition property="os.classifier" value="mac"> |
| <os family="mac" /> |
| </condition> |
| <condition property="os.classifier" value="linux"> |
| <os family="unix" /> |
| </condition> |
| <property name="os.classifier" value="unsupported" /> |
| |
| <!-- Setup the compile classpath --> |
| <path id="classpath"> |
| <fileset dir="${devlib.dir}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <fileset dir="${lib.dir}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </path> |
| |
| <!-- Setup the classpath used for testing --> |
| <path id="test.classpath"> |
| <pathelement path="${testclasses.dir}" /> |
| <pathelement path="${classes.dir}" /> |
| <fileset dir="${devlib.dir}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <fileset dir="${testlib.dir}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| <fileset dir="${lib.dir}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </path> |
| |
| |
| <!--======================================================================= |
| default |
| |
| The target that is run if no target is given |
| ====================================================================--> |
| <target name="default" depends="build" /> |
| |
| |
| <!--======================================================================= |
| build |
| |
| Runs a typical build process to create the project locally |
| ====================================================================--> |
| <target name="build" depends="clean-all,resolve,cobertura,dist-source,dist" /> |
| |
| |
| <!--======================================================================= |
| build-testless |
| |
| Runs a typical build process to create the project locally (no testing) |
| ====================================================================--> |
| <target name="build-testless" depends="clean-all,resolve,dist-source,dist" /> |
| |
| |
| <!--======================================================================= |
| continuous |
| |
| Runs a typical continuous integration build including project dist, |
| test, and coverage artifacts |
| ====================================================================--> |
| <target name="continuous" depends="build,publish" /> |
| |
| |
| <!--======================================================================= |
| continuous-testless |
| |
| Runs a typical continuous integration build including project dist, |
| and coverage artifacts |
| ====================================================================--> |
| <target name="continuous-testless" depends="build-testless,publish" /> |
| |
| |
| <!--======================================================================= |
| install-antcontrib |
| |
| (Fetches and) installs ant-contrib tasks. |
| ====================================================================--> |
| <target name="install-antcontrib" depends="antcontrib.download-check"> |
| <taskdef resource="net/sf/antcontrib/antlib.xml"> |
| <classpath> |
| <fileset dir="${antcontrib.build.cache.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| </taskdef> |
| </target> |
| |
| |
| <!--======================================================================= |
| antcontrib.download-check |
| |
| Fetches ant-contrib from sourceforge if it is not already present |
| ====================================================================--> |
| <target name="antcontrib.download-check"> |
| <condition property="antcontrib.available"> |
| <and> |
| <available file="${antcontrib.build.cache.dir}" /> |
| <available classname="net.sf.antcontrib.logic.IfTask"> |
| <classpath> |
| <fileset dir="${antcontrib.build.cache.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| </available> |
| </and> |
| </condition> |
| <antcall target="antcontrib.download" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| antcontrib.download |
| |
| Fetches ant-contrib from sourceforge |
| ====================================================================--> |
| <target name="antcontrib.download" unless="antcontrib.available"> |
| <mkdir dir="${subfloor.tmp.dir}" /> |
| <get src="http://downloads.sourceforge.net/ant-contrib/ant-contrib-1.0b3-bin.zip" |
| dest="${subfloor.tmp.dir}/antcontrib.zip" |
| usetimestamp="true" /> |
| <unzip src="${subfloor.tmp.dir}/antcontrib.zip" dest="${subfloor.tmp.dir}"> |
| <patternset> |
| <include name="**/*.jar" /> |
| </patternset> |
| </unzip> |
| <copy todir="${antcontrib.build.cache.dir}"> |
| <fileset dir="${subfloor.tmp.dir}/ant-contrib"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </copy> |
| </target> |
| |
| |
| <!--======================================================================= |
| init |
| |
| Ensures that all the required directories exist before processing |
| a build. |
| ====================================================================--> |
| <target name="init"> |
| <mkdir dir="${classes.dir}" /> |
| <mkdir dir="${dist.dir}" /> |
| <mkdir dir="${lib.dir}" /> |
| <mkdir dir="${devlib.dir}" /> |
| <mkdir dir="${testlib.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| install-svnant |
| |
| (Fetches and) installs the SVN ANT for use by this ant script |
| ====================================================================--> |
| <target name="install-svnant" depends="install-ivy"> |
| <if> |
| <istrue value="${svnant.isinstalled}" /> |
| <then> |
| <echo message="Skipping SVN ANT install. SVN ANT has already been configured by the build" /> |
| </then> |
| <else> |
| <taskdef-with-ivy organisation="tigris" |
| module="svnant" |
| revision="1.3.0" |
| resource="org/tigris/subversion/svnant/svnantlib.xml" |
| classname="org.tigris.subversion.svnant.SvnTask" /> |
| <property name="svnant.isinstalled" value="true" /> |
| </else> |
| </if> |
| </target> |
| |
| |
| <!--======================================================================= |
| test-svnant |
| |
| Tests SVN by printing out the repository |
| ====================================================================--> |
| <target name="test-svnant" depends="install-svnant"> |
| <svn javahl="${svnant.use-javahl}" svnkit="${svnant.use-svnkit}"> |
| <wcVersion path="." /> |
| </svn> |
| <echo message="Subversion repository url: ${repository.url}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| svn-revision |
| |
| Prints and sets the SVN revision for the repository at the current dir (if svn.revision is not set) |
| ====================================================================--> |
| <target name="svn-revision" depends="install-svnant"> |
| |
| <svn javahl="${svnant.use-javahl}" svnkit="${svnant.use-svnkit}"> |
| <status path="." revisionProperty="svn.revision" /> |
| </svn> |
| <echo message="Subversion repository revision: ${svn.revision}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| set-build.id |
| |
| Sets a property build.id to the either "development" or the svn revision |
| if in release mode |
| ====================================================================--> |
| <target name="set-build.id" unless="build.id" depends="install-antcontrib"> |
| <if> |
| <istrue value="${release}" /> |
| <then> |
| <antcallback target="svn-revision" return="svn.revision" /> |
| <property name="build.id" value="${svn.revision}" /> |
| </then> |
| <else> |
| <property name="build.id" value="development" /> |
| </else> |
| </if> |
| </target> |
| |
| <!--================================================================================= |
| version-properties: common Ant driven version file generation. Projects that produce |
| a package or packages should run this target. Projects that produce |
| jars only should NOT. |
| ===================================================================================--> |
| <target name="version-properties" depends="set-build.id"> |
| <tstamp> |
| <format property="build.time" pattern="yyyy/MM/dd hh:mm aa" /> |
| </tstamp> |
| <propertyfile file="version.properties" comment="Release Build version info"> |
| <entry key="release.major.number" value="${release.major.number}" /> |
| <entry key="release.minor.number" value="${release.minor.number}" /> |
| <entry key="release.milestone.number" value="${release.milestone.number}" /> |
| <entry key="release.candidate.token" value="${release.candidate.token}" /> |
| <entry key="impl.vendor" value="${impl.vendor}" /> |
| <entry key="impl.version" |
| value="${release.major.number}.${release.minor.number}.${release.milestone.number}.${build.id}" /> |
| <entry key="impl.title" value="${impl.title}" /> |
| <entry key="buildDate" value="${build.time}" /> |
| <entry key="svn.revision" value="${build.id}" /> |
| <entry key="release.build.number" default="0" type="int" operation="+" value="1" pattern="0000" /> |
| </propertyfile> |
| <property file="${basedir}/version.properties" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| install-ivy |
| |
| Fetches and installs IVY ant tasks if not already installed |
| ====================================================================--> |
| <target name="install-ivy" depends="install-antcontrib"> |
| <if> |
| <istrue value="${ivy.isinstalled}" /> |
| <then> |
| <echo message="Skipping IVY install. IVY has already been configured by the build" /> |
| </then> |
| <else> |
| <download-antlib name="ivy" url="${ivy.url}" classname="org.apache.ivy.ant.IvyTask" extension="jar" /> |
| <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant"> |
| <classpath> |
| <fileset dir="${subfloor.resources.dir}/ivy"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| </taskdef> |
| <ivy:settings url="${ivy.settingsurl}" /> |
| <property name="ivy.isinstalled" value="true" /> |
| </else> |
| </if> |
| </target> |
| |
| |
| <!--======================================================================= |
| ivy.check-releasable |
| |
| Verifies that there are no SNAPSHOT dependencies defined in the ivy xml. |
| If there are SNAPSHOTS, fail the release build. |
| ====================================================================--> |
| <target name="ivy.check-releasable" depends="install-ivy, install-antcontrib"> |
| <if> |
| <istrue value="${release}" /> |
| <then> |
| <sequential> |
| <ivy:artifactproperty conf="${ivy.configs}" name="dep.[module]/[artifact]-[revision]" value="[revision]" /> |
| |
| <propertyselector property="violators" match="dep\..*SNAPSHOT.*" select="\0" casesensitive="false" /> |
| |
| <fail if="violators" |
| message="Release not possible, you have dependencies on non-released artifacts: ${violators}" /> |
| </sequential> |
| </then> |
| </if> |
| </target> |
| |
| |
| <!--======================================================================= |
| resolve |
| |
| Using ivy and the dependencies for the project (defined in the ivy.xml |
| file), this task will retrieve the needed files and place them into |
| the defined directories. |
| ====================================================================--> |
| <target name="resolve" |
| depends="resolve-default, resolve-test, ivy.check-releasable" |
| description="Retrieves all the dependent libraries" /> |
| |
| <target name="resolve-init" unless="resolve-init.skip" depends="install-ivy"> |
| <!-- If this is the 1st time through resolve-init, then we need to clean up the jars |
| --> |
| <antcall target="clean-jars" /> |
| <property name="resolve-init.skip" value="" /> |
| </target> |
| |
| <target name="resolve-default" depends="resolve-default.default,resolve-default.composite"/> |
| |
| <!-- |
| This target resolves the default IVY configuration as a composite of child configurations. |
| You should set ivy.default.sub-configs in your build.properties only if you want your default |
| configuration to be treated as a composite of two or more child configurations. |
| To turn this on, set ivy.default.sub-configs property in your build.properties, e.g. |
| ivy.default.sub-configs=external,internal |
| Note: the parent config "default" proper will not be resolved |
| --> |
| <target name="resolve-default.composite" depends="install-antcontrib,resolve-init" if="ivy.default.sub-configs"> |
| <for list="${ivy.default.sub-configs}" param="conf"> |
| <sequential> |
| <ivy:resolve file="${ivyfile}" conf="default_@{conf}" /> |
| <ivy:retrieve conf="default_@{conf}" pattern="${lib.dir}/@{conf}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" /> |
| </sequential> |
| </for> |
| </target> |
| |
| <target name="resolve-default.default" depends="resolve-init" unless="ivy.default.sub-configs"> |
| <ivy:resolve file="${ivyfile}" conf="default" /> |
| <ivy:retrieve conf="default" pattern="${lib.dir}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" /> |
| </target> |
| |
| <target name="resolve-test" depends="resolve-init"> |
| <ivy:resolve file="${ivyfile}" conf="test" /> |
| <ivy:retrieve conf="test" pattern="${testlib.dir}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" /> |
| </target> |
| |
| <target name="resolve-enunciate" depends="resolve-init"> |
| <ivy:resolve file="${ivyfile}" conf="enunciate" /> |
| <ivy:retrieve conf="enunciate" pattern="${basedir}/enunciate/lib/[module]-[revision](-[classifier]).[ext]" /> |
| </target> |
| |
| <target name="resolve-codegen" depends="resolve-init"> |
| <ivy:resolve file="${ivyfile}" conf="codegen" /> |
| <ivy:retrieve conf="codegen" pattern="${lib.dir}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" /> |
| </target> |
| |
| <target name="resolve-runtime" depends="resolve-init"> |
| <ivy:resolve file="${ivyfile}" conf="runtime" /> |
| <ivy:retrieve conf="runtime" pattern="${lib.dir}/[module]-[revision](-[classifier]).[ext]" symlink="${ivy.use.symlinks.internal}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| ivy-clean-cache |
| |
| Cleans the IVY cache. You are erasing IVY's memory. Run this if you |
| want to force IVY to go fetch all your project dependencies from scratch. |
| WARNING: this will affect all IVY projects, not just the current workspace |
| ====================================================================--> |
| <target name="ivy-clean-cache" depends="install-ivy"> |
| <ivy:cleancache /> |
| </target> |
| |
| |
| <!--======================================================================= |
| ivy-clean-local |
| |
| Completely cleans your local repository of any files published locally |
| by way of publish-local. |
| WARNING: this is a global action and will affect other IVY projects |
| currently referencing a locally published dependency |
| ====================================================================--> |
| <target name="ivy-clean-local" depends="install-ivy"> |
| <delete dir="${ivy.local.default.root}/" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| ivy-clean-by-name |
| |
| Cleans your IVY cache and local repository of specific files. |
| WARNING: this is a global action and will affect other IVY projects |
| currently referencing a locally published dependency |
| ====================================================================--> |
| <target name="ivy-clean-pentaho" depends="install-ivy"> |
| <mkdir dir="${ivy.local.default.root}" /> |
| <!-- just in case it doesn't exist --> |
| <for param="dir"> |
| <path> |
| <dirset dir="${ivy.local.default.root}" includes="*${ivy.clean.pattern}*" /> |
| <dirset dir="${ivy.default.ivy.user.dir}/cache" includes="*${ivy.clean.pattern}*" /> |
| </path> |
| <sequential> |
| <delete dir="@{dir}" includeemptydirs="true" /> |
| </sequential> |
| </for> |
| <for param="file"> |
| <path> |
| <fileset dir="${ivy.local.default.root}" includes="*${ivy.clean.pattern}*" /> |
| <fileset dir="${ivy.default.ivy.user.dir}/cache" includes="*${ivy.clean.pattern}*" /> |
| </path> |
| <sequential> |
| <delete file="@{file}" /> |
| </sequential> |
| </for> |
| </target> |
| |
| |
| <!--======================================================================= |
| ivy-report |
| |
| Generates an IVY dependency report for this project. |
| ====================================================================--> |
| <target name="ivy-report" depends="install-ivy"> |
| <ivy:resolve file="${ivyfile}" conf="${ivy.configs}" /> |
| <ivy:report xml="true" todir="${ivy.reports.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| publish-local-nojar |
| |
| Publishes the jar file for this project to the user's local repository |
| for download by other projects currently being executed on the user's |
| system. |
| ====================================================================--> |
| <target name="publish-local-nojar" depends="install-ivy,publish-local-nojar.internal"> |
| <if> |
| <equals arg1="${tests.publish}" arg2="true" /> |
| <then> |
| <antcall target="publish-local-nojar.internal"> |
| <param name="ivy.artifact.id" value="${ivy.artifact.id}-test"/> |
| </antcall> |
| </then> |
| </if> |
| <antcall target="publish-local-nojar.post"/> |
| </target> |
| |
| <!--======================================================================= |
| publish-local-nojar.post this target is invoked after the normal set of publish-local-nojar |
| is completed, override this to perform additional publishing in extensions of subfloor, etc |
| ====================================================================--> |
| <target name="publish-local-nojar.post"> |
| </target> |
| |
| <target name="publish-local-nojar.internal" depends="install-ivy"> |
| <ivy:resolve file="${ivy.artifact.ivyfilename}" /> |
| <ivy:publish resolver="local" pubrevision="${project.revision}" overwrite="true" forcedeliver="true" warnonmissing="yes" haltonmissing="no"> |
| <artifacts pattern="${dist.dir}/[artifact]-[revision](-[classifier]).[ext]" /> |
| </ivy:publish> |
| </target> |
| |
| <!--======================================================================= |
| publish-local |
| |
| Builds and publishes the jar file for this project to the user's |
| local repository for download by other projects currently being |
| executed on the user's system. |
| ====================================================================--> |
| <target name="publish-local" |
| depends="dist, dist-source, publish-local-nojar" |
| description="Builds and publishes the jar file to the local repository" /> |
| |
| |
| <!--======================================================================= |
| publish |
| |
| Creates and publishes the jar file for this project to a Maven2 |
| repository. |
| ====================================================================--> |
| <target name="publish" depends="dist, dist-source, publish-nojar"> |
| </target> |
| |
| |
| <!--======================================================================= |
| publish-nojar |
| |
| Publishes the jar file for this project to a Maven2 repository. |
| ====================================================================--> |
| <target name="publish-nojar" depends="install-antcontrib,create-pom,ivy.deliver,publish-nojar.internal"> |
| <if> |
| <equals arg1="${tests.publish}" arg2="true" /> |
| <then> |
| <antcall target="publish-nojar.internal"> |
| <param name="ivy.artifact.id" value="${ivy.artifact.id}-test"/> |
| </antcall> |
| </then> |
| </if> |
| </target> |
| |
| <target name="publish-nojar.internal" depends="install-antcontrib,create-pom,ivy.deliver"> |
| <antcall target="maven-publish-dependencies"> |
| <param name="publish.groupId" value="${ivy.artifact.group}" /> |
| <param name="publish.artifactId" value="${ivy.artifact.id}" /> |
| <param name="publish.version" value="${project.revision}" /> |
| <param name="publish.file" value="${ivy.artifact.ivypathname}" /> |
| </antcall> |
| |
| <if> |
| <equals arg1="${source.publish}" arg2="true" /> |
| <then> |
| <antcall target="maven-publish-sources"> |
| <param name="publish.groupId" value="${ivy.artifact.group}" /> |
| <param name="publish.artifactId" value="${ivy.artifact.id}" /> |
| <param name="publish.version" value="${project.revision}" /> |
| <param name="publish.file" value="${dist.dir}/${ivy.artifact.id}-${project.revision}-sources.jar" /> |
| </antcall> |
| </then> |
| </if> |
| |
| <antcall target="maven-publish-artifact"> |
| <param name="publish.pomFile" value="${ivy.artifact.pomfile}" /> |
| <param name="publish.file" value="${dist.dir}/${ivy.artifact.id}-${project.revision}.jar" /> |
| </antcall> |
| |
| <antcall target="maven-publish.post"/> |
| |
| </target> |
| |
| <!-- Override this if anything is needed to be done after the standard parts of publish are completed --> |
| <!-- Such as: publishing non-standard/extended artifacts, etc --> |
| <target name="maven-publish.post"/> |
| |
| <!--======================================================================= |
| ivy.deliver |
| |
| Creates a publishable version of the ivy dependencies file, ivy.xml |
| ====================================================================--> |
| <target name="ivy.deliver" depends="resolve"> |
| <ivy:deliver conf="*(public)" deliverpattern="${dist.dir}/ivy.xml" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| maven-publish-dependencies |
| |
| A function that deploys an ivy.xml file to a maven repository |
| ====================================================================--> |
| <target name="maven-publish-dependencies" depends="install-antcontrib"> |
| <sequential> |
| <fail message="No file found at: ${publish.file}"> |
| <condition> |
| <not> |
| <available file="${publish.file}" /> |
| </not> |
| </condition> |
| </fail> |
| <echo message="Publishing ${publish.file} to ${ivy.repository.publish}..." /> |
| <if> |
| <isset property="isWindows" /> |
| <then> |
| <exec executable="cmd" failonerror="true"> |
| <arg value="/c" /> |
| <arg value="mvn.bat" /> |
| <arg value="deploy:deploy-file" /> |
| <arg value="-DrepositoryId=${ivy.repository.id}" /> |
| <arg value="-Durl=${ivy.repository.publish}" /> |
| <arg value="-DgroupId=${publish.groupId}" /> |
| <arg value="-DartifactId=${publish.artifactId}" /> |
| <arg value="-Dversion=${publish.version}" /> |
| <arg value="-Dpackaging=ivy.xml" /> |
| <arg value="-Dfile=${publish.file}" /> |
| </exec> |
| </then> |
| <else> |
| <exec executable="mvn" failonerror="true"> |
| <arg value="deploy:deploy-file" /> |
| <arg value="-DrepositoryId=${ivy.repository.id}" /> |
| <arg value="-Durl=${ivy.repository.publish}" /> |
| <arg value="-DgroupId=${publish.groupId}" /> |
| <arg value="-DartifactId=${publish.artifactId}" /> |
| <arg value="-Dversion=${publish.version}" /> |
| <arg value="-Dpackaging=ivy.xml" /> |
| <arg value="-Dfile=${publish.file}" /> |
| <arg value="-e" /> |
| </exec> |
| </else> |
| </if> |
| </sequential> |
| </target> |
| |
| |
| <!--======================================================================= |
| maven-publish-artifact |
| |
| A function that deploys an artifact to a maven repository |
| ====================================================================--> |
| <target name="maven-publish-artifact" depends="install-antcontrib"> |
| <sequential> |
| <fail message="No file found at: ${publish.file}"> |
| <condition> |
| <not> |
| <available file="${publish.file}" /> |
| </not> |
| </condition> |
| </fail> |
| <echo message="Publishing ${publish.file} to ${ivy.repository.publish}..." /> |
| <if> |
| <isset property="isWindows" /> |
| <then> |
| <exec executable="cmd" failonerror="true"> |
| <arg value="/c" /> |
| <arg value="mvn.bat" /> |
| <arg value="deploy:deploy-file" /> |
| <arg value="-DrepositoryId=${ivy.repository.id}" /> |
| <arg value="-Durl=${ivy.repository.publish}" /> |
| <arg value="-DpomFile=${publish.pomFile}" /> |
| <arg value="-Dfile=${publish.file}" /> |
| </exec> |
| </then> |
| <else> |
| <exec executable="mvn" failonerror="true"> |
| <arg value="deploy:deploy-file" /> |
| <arg value="-DrepositoryId=${ivy.repository.id}" /> |
| <arg value="-Durl=${ivy.repository.publish}" /> |
| <arg value="-DpomFile=${publish.pomFile}" /> |
| <arg value="-Dfile=${publish.file}" /> |
| </exec> |
| </else> |
| </if> |
| </sequential> |
| </target> |
| |
| |
| <!--======================================================================= |
| maven-publish-sources |
| |
| A function that deploys a java-sources artifact to a maven repository |
| ====================================================================--> |
| <target name="maven-publish-sources" depends="install-antcontrib"> |
| <sequential> |
| <fail message="No file found at: ${publish.file}"> |
| <condition> |
| <not> |
| <available file="${publish.file}" /> |
| </not> |
| </condition> |
| </fail> |
| <echo message="Publishing ${publish.file} to ${ivy.repository.publish}..." /> |
| <if> |
| <isset property="isWindows" /> |
| <then> |
| <exec executable="cmd" failonerror="true"> |
| <arg value="/c" /> |
| <arg value="mvn.bat" /> |
| <arg value="deploy:deploy-file" /> |
| <arg value="-DrepositoryId=${ivy.repository.id}" /> |
| <arg value="-Durl=${ivy.repository.publish}" /> |
| <arg value="-DgroupId=${publish.groupId}" /> |
| <arg value="-DartifactId=${publish.artifactId}" /> |
| <arg value="-Dversion=${publish.version}" /> |
| <arg value="-DgeneratePom=true" /> |
| <arg value="-Dpackaging=java-source" /> |
| <arg value="-Dfile=${publish.file}" /> |
| </exec> |
| </then> |
| <else> |
| <exec executable="mvn" failonerror="true"> |
| <arg value="deploy:deploy-file" /> |
| <arg value="-DrepositoryId=${ivy.repository.id}" /> |
| <arg value="-Durl=${ivy.repository.publish}" /> |
| <arg value="-DgroupId=${publish.groupId}" /> |
| <arg value="-DartifactId=${publish.artifactId}" /> |
| <arg value="-Dversion=${publish.version}" /> |
| <arg value="-DgeneratePom=true" /> |
| <arg value="-Dpackaging=java-source" /> |
| <arg value="-Dfile=${publish.file}" /> |
| </exec> |
| </else> |
| </if> |
| </sequential> |
| </target> |
| |
| |
| <!--======================================================================= |
| create-pom |
| |
| Creates the POM file for publishing the jar file to a Maven2 repository. |
| ====================================================================--> |
| <target name="create-pom" depends="install-ivy"> |
| <ivy:makepom ivyfile="${ivyfile}" pomfile="${dist.dir}/pom.xml"> |
| <mapping conf="default" scope="compile" /> |
| <mapping conf="runtime" scope="runtime" /> |
| </ivy:makepom> |
| </target> |
| |
| |
| <!--======================================================================= |
| clean-jars |
| |
| Removes all the libraries that have been downloaded for this project |
| using the ivy dependencies. |
| ====================================================================--> |
| <target name="clean-jars"> |
| <delete dir="${lib.dir}" /> |
| <delete dir="${testlib.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| clean |
| |
| Removes all the files generated from the build process. |
| ====================================================================--> |
| <target name="clean" |
| description="Cleans all the files generated from a build with the exception of IVY-downloaded jars (see clean-all)" |
| depends="clean-tests, clean-cobertura, clean-sonar, clean-javadoc, clean-dist"> |
| <delete dir="${classes.dir}" /> |
| <delete dir="${bin.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| clean-dist |
| |
| Removes all dist artifacts |
| ====================================================================--> |
| <target name="clean-dist"> |
| <delete dir="${dist.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| clean-all |
| |
| Removes all the libraries that have been downloaded for this project |
| in the workspace's lib dirs as well as all the files |
| generated from the build process. |
| ====================================================================--> |
| <target name="clean-all" depends="clean,clean-jars" description="Cleans all the generated and dependency files" /> |
| |
| |
| <!--======================================================================= |
| copy-license-lgpl |
| |
| Copies the LGPL license file into the binary directory. |
| ====================================================================--> |
| <target name="copy-license-lgpl" if="lgpl-license-avail"> |
| <copy todir="${classes.dir}/META-INF"> |
| <fileset dir="${license.dir}" includes="lgpl-2.1.txt" /> |
| </copy> |
| </target> |
| |
| |
| <!--======================================================================= |
| copy-license-gpl-parent |
| |
| Copies the GPL license file from the parent directory into the |
| binary directory. |
| ====================================================================--> |
| <target name="copy-license-gpl" if="gpl-license-avail"> |
| <copy todir="${classes.dir}/META-INF"> |
| <fileset dir="${license.dir}" includes="gpl-2.0.txt" /> |
| </copy> |
| </target> |
| |
| |
| <!--======================================================================= |
| compile |
| |
| Compiles the source code (using the specified options) into the |
| binary directory. |
| |
| NOTE: This contains multiple sub-tasks which will occur in the |
| following order (this is provided for easier overriding by |
| the build.xml which will include this file)... |
| - compile.pre : anything needed to prep for compile |
| - compile.compile : the actual compilation step |
| - compile.src_copy : copying the source into the bin directory |
| - compile.res_copy : copying the resources into the bin directory |
| - compile.lic_copy : copying the license information into the bin directory |
| - compile.post : anything needed after the compile is done |
| ====================================================================--> |
| <target name="compile" |
| depends="init, compile.pre, compile.compile, compile.src_copy, compile.res_copy, compile.lic_copy, compile.post" |
| description="Performs all the steps to prepare the bin directory with a complete compilation" /> |
| |
| |
| <!--======================================================================= |
| compile.pre |
| |
| Prepares to perform the compile. |
| ====================================================================--> |
| <target name="compile.pre" /> |
| |
| |
| <!--======================================================================= |
| compile.compile |
| |
| Performs the actual compile |
| ====================================================================--> |
| <target name="compile.compile" depends="init"> |
| <javac destdir="${classes.dir}" |
| debug="${javac.debug}" |
| deprecation="${javac.deprecation}" |
| fork="true" |
| memorymaximumsize="${javac.maxmemory}" |
| source="${javac.source}" |
| target="${javac.target}"> |
| <classpath> |
| <path refid="classpath" /> |
| </classpath> |
| <src path="${src.dir}" /> |
| <compilerarg value="${javac.xlint}" /> |
| </javac> |
| </target> |
| |
| |
| <!--======================================================================= |
| compile.res_copy |
| |
| Copies any needed resources into the classes directory. Will not |
| duplicate copying of resources from src tree (handled by compile.src_copy |
| if jar.include.source is set. |
| ====================================================================--> |
| <target name="compile.res_copy" depends="install-antcontrib"> |
| <if> |
| <available file="${res.dir}" /> |
| <then> |
| <copy todir="${classes.dir}"> |
| <fileset dir="${res.dir}" /> |
| </copy> |
| </then> |
| </if> |
| |
| <if> |
| <not> |
| <isset property="jar.include.source" /> |
| </not> |
| <then> |
| <copy todir="${classes.dir}" flatten="false"> |
| <fileset dir="${src.dir}" excludes="**/*.java" /> |
| </copy> |
| </then> |
| </if> |
| </target> |
| |
| |
| <!--======================================================================= |
| compile.src_copy |
| |
| Copies the source files to the bin directory |
| NOTE: if the dont.copy.source variable exists, this step will be |
| skipped! |
| ====================================================================--> |
| <target name="compile.src_copy" depends="init" if="jar.include.source"> |
| <copy todir="${classes.dir}" flatten="false"> |
| <fileset dir="${src.dir}" /> |
| </copy> |
| </target> |
| |
| |
| <!--======================================================================= |
| compile.lic_copy |
| |
| Copies the license file(s) into the bin directory |
| ====================================================================--> |
| <target name="compile.lic_copy" depends="init"> |
| <condition property="lgpl-license-avail"> |
| <available file="${license.dir}/lgpl-2.1.txt" /> |
| </condition> |
| <antcall target="copy-license-lgpl" /> |
| <condition property="gpl-license-avail"> |
| <available file="${license.dir}/gpl-2.0.txt" /> |
| </condition> |
| <antcall target="copy-license-gpl" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| compile.post |
| |
| Performs any needed post-compile tasks |
| ====================================================================--> |
| <target name="compile.post" /> |
| |
| |
| <!--======================================================================= |
| jar |
| |
| Creates a jar file from the bin directory |
| ====================================================================--> |
| <target name="jar" |
| depends="jar.main,jar.test" |
| description="Jars up the bin directory after a compile"> |
| </target> |
| |
| <!-- jar the tests ONLY IF tests.publish it true --> |
| <!-- if the compile-tests target is in the dependency list for this target, --> |
| <!-- it will get executed no matter what the value of tests.publish is --> |
| <target name="jar.test" |
| if="tests.publish"> |
| <antcall target="compile-tests" /> |
| <jar destfile="${dist.dir}/${ivy.artifact.id}-test-${project.revision}.jar" manifest="${dist.manifest.file}"> |
| <fileset dir="${testclasses.dir}"/> |
| </jar> |
| </target> |
| |
| <target name="jar.main" |
| depends="compile,set-build.id,generate.manifest"> |
| <jar destfile="${dist.dir}/${ivy.artifact.id}-${project.revision}.jar" manifest="${dist.manifest.file}"> |
| <fileset dir="${classes.dir}" /> |
| </jar> |
| </target> |
| |
| <!--======================================================================= |
| generate.manifest |
| |
| Creates a new manifest file if one is not specified, or updates |
| an existing manifest file if one is specified. |
| ====================================================================--> |
| <target name="generate.manifest" depends="init,set-build.id"> |
| <delete file="${dist.manifest.file}" /> |
| <touch file="${dist.manifest.file}" /> |
| <copy file="${manifest.file}" tofile="${dist.manifest.file}" overwrite="true" failonerror="false" /> |
| |
| <manifest file="${dist.manifest.file}" mode="update"> |
| <attribute name="Implementation-Title" value="${impl.title}" /> |
| <attribute name="Implementation-Version" value="${project.revision}.${build.id}" /> |
| <attribute name="Implementation-Vendor" value="${impl.vendor}" /> |
| <attribute name="Implementation-ProductID" value="${impl.productID}" /> |
| </manifest> |
| </target> |
| |
| |
| <!--======================================================================= |
| dist-source |
| |
| Generates zip and targz distributions of the javadoc |
| ====================================================================--> |
| <target name="dist-source" depends="source.jar, source.zip, source.targz" /> |
| |
| |
| <!--======================================================================= |
| source.jar |
| |
| Creates a jar of the project source for distribution |
| ====================================================================--> |
| <target name="source.jar" depends="init,install-antcontrib"> |
| <jar jarfile="${dist.dir}/${ivy.artifact.id}-${project.revision}-sources.jar" basedir="${src.dir}" /> |
| <if> |
| <equals arg1="${tests.publish}" arg2="true" /> |
| <then> |
| <jar jarfile="${dist.dir}/${ivy.artifact.id}-test-${project.revision}-sources.jar" basedir="${src.dir}" /> |
| </then> |
| </if> |
| </target> |
| |
| <!--======================================================================= |
| source.zip |
| |
| Creates a zip of the project source for distribution |
| ====================================================================--> |
| <target name="source.zip" depends="init"> |
| <jar jarfile="${dist.dir}/${source.zip.filename}" basedir="${src.dir}" /> |
| </target> |
| |
| <!--======================================================================= |
| source.targz |
| |
| Creates a gzipped tar of the project source for distribution |
| ====================================================================--> |
| <target name="source.targz" depends="init"> |
| <tar compression="gzip" destfile="${dist.dir}/${source.tar.filename}" basedir="${src.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| clean-tests |
| |
| Removes all files related to tests |
| ====================================================================--> |
| <target name="clean-tests"> |
| <delete dir="${testbin.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| init-tests |
| |
| Compiles project test source |
| ====================================================================--> |
| <target name="init-tests" depends="clean-tests"> |
| <mkdir dir="${testclasses.dir}" /> |
| <mkdir dir="${testsrc.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| compile-tests |
| |
| Compiles project test source |
| ====================================================================--> |
| <target name="compile-tests" depends="init-tests"> |
| <javac destdir="${testclasses.dir}" |
| debug="true" |
| optimize="false" |
| source="${javac.source}" |
| target="${javac.target}" |
| fork="true"> |
| <src path="${testsrc.dir}" /> |
| <classpath refid="test.classpath" /> |
| </javac> |
| |
| <!-- Copy the non-java files from the source directory to the test classes directory |
| --> |
| <copy todir="${testclasses.dir}"> |
| <fileset dir="${testsrc.dir}"> |
| <exclude name="**/*.java" /> |
| </fileset> |
| </copy> |
| </target> |
| |
| |
| <!--======================================================================= |
| test |
| |
| Compiles and runs all the tests for the project |
| ====================================================================--> |
| <target name="test" depends="compile,compile-tests, init-test-reports" description="Compiles and runs unit tests"> |
| <junit maxmemory="${junit.maxmemory}" |
| dir="${junit.base.dir}" |
| fork="yes" |
| forkmode="${junit.forkmode}" |
| failureProperty="test.failed" |
| haltonfailure="${junit.haltonfailure}" |
| haltonerror="${junit.haltonerror}" |
| printsummary="yes"> |
| <sysproperty key="java.awt.headless" value="${headless.unittest}" /> |
| |
| <syspropertyset> |
| <propertyref prefix="junit.sysprop." /> |
| <mapper type="glob" from="junit.sysprop.*" to="*"/> |
| </syspropertyset> |
| |
| <classpath refid="test.classpath" /> |
| <formatter type="xml" /> |
| <test name="${testcase}" todir="${testreports.xml.dir}" if="testcase" /> |
| <batchtest fork="yes" todir="${testreports.xml.dir}" unless="testcase"> |
| <fileset dir="${testsrc.dir}" casesensitive="yes"> |
| <include name="**/*Test.java" /> |
| </fileset> |
| </batchtest> |
| </junit> |
| |
| <junitreport todir="${testreports.html.dir}"> |
| <fileset dir="${testreports.xml.dir}"> |
| <include name="TEST-*.xml" /> |
| </fileset> |
| <report format="frames" todir="${testreports.html.dir}" /> |
| </junitreport> |
| </target> |
| |
| |
| <!--======================================================================= |
| clean-test-reports |
| |
| Remove all xml and html JUnit test reports |
| ====================================================================--> |
| <target name="clean-test-reports"> |
| <delete dir="${testreports.xml.dir}" /> |
| <delete dir="${testreports.html.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| init-test-reports |
| |
| Prepare directories for JUnit test reports |
| ====================================================================--> |
| <target name="init-test-reports" depends="clean-test-reports"> |
| <mkdir dir="${testreports.xml.dir}" /> |
| <mkdir dir="${testreports.html.dir}" /> |
| </target> |
| |
| <!--======================================================================= |
| dist |
| |
| Creates a distribution of this project |
| ====================================================================--> |
| <target name="dist" depends="jar" description="Creates a distribution" /> |
| |
| |
| <!--======================================================================= |
| dist-full |
| |
| Creates a distribution of this project including all sources needed |
| to build as well as the resultant jar |
| ====================================================================--> |
| <target name="dist-full" depends="jar" |
| description="Creates all the distributable items for this project"> |
| <!-- Create the required zip distribution which contains the entire project --> |
| <zip destfile="${dist.dir}/${ivy.artifact.id}-${project.revision}.zip"> |
| <fileset dir="${basedir}"> |
| <exclude name="bin/"/> |
| <exclude name="dist/"/> |
| <exclude name="eclipse-bin/"/> |
| </fileset> |
| <zipfileset dir="${dist.dir}" includes="**/*.jar"/> |
| </zip> |
| </target> |
| |
| |
| <!--======================================================================= |
| javadoc |
| |
| Generates javadoc source documentation for this project |
| ====================================================================--> |
| <target name="javadoc" depends="javadoc.init, compile"> |
| <javadoc destdir="${javadoc.dir}/docs/api" |
| access="public" |
| source="6" |
| use="true" |
| notree="false" |
| nonavbar="false" |
| noindex="false" |
| splitindex="true" |
| author="true" |
| version="true" |
| maxmemory="256M" |
| nodeprecatedlist="false" |
| nodeprecated="false" |
| packagenames="${javadoc.packagenames}" |
| sourcepath="${src.dir}" |
| doctitle="${impl.title} documentation"> |
| <link href="http://docs.oracle.com/javase/6/docs/api/" /> |
| <classpath refid="classpath" /> |
| </javadoc> |
| </target> |
| |
| |
| <!--======================================================================= |
| enunciate |
| |
| Generates enunciate documentation for the resoruce |
| classes comprising the BIServer REST api |
| ====================================================================--> |
| <target name="enunciate" depends="resolve-enunciate"> |
| <path id="enunciate.classpath"> |
| <fileset dir="${lib.dir}"> |
| <include name="*.jar" /> |
| <exclude name="saxon*.jar" /> |
| </fileset> |
| <dirset dir="${classes.dir}" /> |
| <fileset dir="${dist.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| <fileset dir="${enunciate.home}/lib"> |
| <include name="*.jar" /> |
| </fileset> |
| </path> |
| |
| <taskdef name="enunciate" classname="org.codehaus.enunciate.main.EnunciateTask"> |
| <classpath refid="enunciate.classpath" /> |
| </taskdef> |
| |
| <enunciate dir="${basedir}/src" |
| configFile="${basedir}/enunciate.xml" |
| generateDir="${enunciate.bin.dir}/generate" |
| compileDir="${enunciate.bin.dir}/compile" |
| buildDir="${enunciate.bin.dir}/build" |
| packageDir="${enunciate.bin.dir}/package" |
| verbose="true"> |
| <include name="**/*.java" /> |
| <!-- have to exclude class that contains jersey multipart endpoint until http://jira.codehaus.org/browse/ENUNCIATE-537 is fixed --> |
| |
| <classpath refid="enunciate.classpath" /> |
| <export artifactId="docs" destination="${dist.dir}/${enunciate.packagename}.zip" /> |
| </enunciate> |
| </target> |
| |
| <!--======================================================================= |
| dist-javadoc |
| |
| Generates zip and targz distributions of the javadoc |
| ====================================================================--> |
| <target name="dist-javadoc" depends="javadoc.zip, javadoc.targz" /> |
| |
| |
| <!--======================================================================= |
| clean-javadoc |
| |
| Removes generated javadoc files (note, this does not remove javadoc distributions. |
| Use clean-dist to remove artifacts from the dist.dir. |
| ====================================================================--> |
| <target name="clean-javadoc"> |
| <delete dir="${javadoc.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| javadoc.init |
| |
| Creates directories for javadoc process |
| ====================================================================--> |
| <target name="javadoc.init" depends="clean-javadoc"> |
| <mkdir dir="${javadoc.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| javadoc.zip |
| |
| Creates a zip of the javadoc for distribution |
| ====================================================================--> |
| <target name="javadoc.zip" depends="javadoc"> |
| <jar jarfile="${dist.dir}/${javadoc.zip.filename}" |
| basedir="${javadoc.dir}" |
| includes="**/*" |
| excludes="**/Thumbs.db" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| javadoc.targz |
| |
| Creates a gzipped tar of the javadoc for distribution |
| ====================================================================--> |
| <target name="javadoc.targz" depends="javadoc"> |
| <tar compression="gzip" |
| destfile="${dist.dir}/${javadoc.tar.filename}" |
| basedir="${javadoc.dir}" |
| includes="**/*" |
| excludes="**/Thumbs.db" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| cobertura |
| |
| Runs tests in an instrumented environment and produces Cobertura test coverage reports |
| ====================================================================--> |
| <target name="cobertura" |
| description="Runs tests in an instrumented environment and produces Cobertura test coverage reports" |
| depends="clean-cobertura,install-cobertura,compile,compile-tests,cobertura.instrument-classes,cobertura.test-instrumented,cobertura.xml-report,cobertura.html-report" /> |
| |
| |
| <!--======================================================================= |
| cobertura.instrument-classes |
| |
| Instruments the application classes used by Cobertura during cobertura.test-instrumented |
| ====================================================================--> |
| <target name="cobertura.instrument-classes" depends="cobertura.clean-instrumented-classes,install-cobertura,compile"> |
| <cobertura-instrument todir="${instrumented.classes.dir}" datafile="${cobertura.data.dir}/cobertura.ser"> |
| <ignore regex="org.apache.log4j.*" /> |
| <fileset dir="${classes.dir}"> |
| <!-- |
| Instrument all the application classes, but |
| don't instrument the test classes. |
| --> |
| <include name="**/*.class" /> |
| <exclude name="**/*Test.class" /> |
| </fileset> |
| |
| </cobertura-instrument> |
| </target> |
| |
| |
| |
| <!--======================================================================= |
| install-cobertura |
| |
| Downloads and installs Cobertura ant tasks |
| ====================================================================--> |
| <target name="install-cobertura" depends="install-ivy"> |
| <taskdef-with-ivy organisation="net.sourceforge.cobertura" module="cobertura" revision="${cobertura.version}" resource="tasks.properties" classname="net.sourceforge.cobertura.ant.InstrumentTask"/> |
| </target> |
| |
| |
| <!--======================================================================= |
| clean-cobertura |
| |
| Removes all files created by Cobertura code coverage utility |
| ====================================================================--> |
| <target name="clean-cobertura" depends="cobertura.clean-instrumented-classes,cobertura.clean-coverage-reports"> |
| <delete dir="${cobertura.data.dir}" /> |
| </target> |
| |
| <!--======================================================================= |
| clean-sonar |
| |
| Removes the temporary file location for sonar files |
| ====================================================================--> |
| <target name="clean-sonar"> |
| <delete dir="${basedir}/.sonar" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| cobertura.clean-instrumented-classes |
| |
| Remove the instrumented classes used by Cobertura |
| ====================================================================--> |
| <target name="cobertura.clean-instrumented-classes"> |
| <delete dir="${instrumented.classes.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| cobertura.clean-coverage-reports |
| |
| Remove all xml and html Cobertura coverage reports |
| ====================================================================--> |
| <target name="cobertura.clean-coverage-reports"> |
| <delete dir="${coberturareports.xml.dir}" /> |
| <delete dir="${coberturareports.html.dir}" /> |
| <delete dir="${coberturareports.dir}" /> |
| </target> |
| |
| |
| <!--======================================================================= |
| cobertura.test-instrumented |
| |
| Runs tests against instrumented classes and generates xml and html JUnit test reports |
| ====================================================================--> |
| <target name="cobertura.test-instrumented" |
| depends="init-test-reports,install-cobertura,compile,compile-tests,cobertura.instrument-classes"> |
| <mkdir dir="${instrumented.classes.dir}" /> |
| <path id="cobertura.classpath"> |
| <fileset dir="${subfloor.resources.dir}/cobertura-${cobertura.version}"> |
| <include name="*.jar" /> |
| </fileset> |
| </path> |
| <junit fork="yes" |
| forkmode="${junit.forkmode}" |
| dir="${junit.base.dir}" |
| maxmemory="${junit.maxmemory}" |
| failureProperty="test.failed" |
| haltonerror="${junit.haltonerror}" |
| haltonfailure="${junit.haltonfailure}"> |
| <sysproperty key="java.awt.headless" value="${headless.unittest}" /> |
| |
| <!-- Specify the name of the coverage data file to use. --> |
| <sysproperty key="net.sourceforge.cobertura.datafile" file="${cobertura.data.dir}/cobertura.ser" /> |
| |
| <syspropertyset> |
| <propertyref prefix="junit.sysprop." /> |
| <mapper type="glob" from="junit.sysprop.*" to="*"/> |
| </syspropertyset> |
| |
| <!-- |
| Note the classpath order: instrumented classes are before the |
| original (uninstrumented) classes. This is important. |
| --> |
| <classpath location="${instrumented.classes.dir}" /> |
| <classpath refid="test.classpath" /> |
| <classpath refid="cobertura.classpath" /> |
| |
| <formatter type="xml" /> |
| <test name="${testcase}" todir="${testreports.xml.dir}" if="testcase" /> |
| <batchtest todir="${testreports.xml.dir}" unless="testcase"> |
| <fileset dir="${testsrc.dir}" casesensitive="yes"> |
| <include name="**/*Test.java" /> |
| </fileset> |
| </batchtest> |
| </junit> |
| |
| <junitreport todir="${testreports.html.dir}"> |
| <fileset dir="${testreports.xml.dir}"> |
| <include name="TEST-*.xml" /> |
| </fileset> |
| <report format="frames" todir="${testreports.html.dir}" /> |
| </junitreport> |
| </target> |
| |
| |
| <!--======================================================================= |
| cobertura.xml-report |
| |
| Produces machine-readable xml Cobertura coverage report from results of instrumented tests |
| ====================================================================--> |
| <target name="cobertura.xml-report" depends="cobertura.test-instrumented"> |
| <cobertura-report destdir="${coberturareports.xml.dir}" datafile="${cobertura.data.dir}/cobertura.ser" format="xml"> |
| <fileset dir="${src.dir}"> |
| <include name="**/*.java" /> |
| </fileset> |
| </cobertura-report> |
| </target> |
| |
| |
| <!--======================================================================= |
| cobertura.html-report |
| |
| Produces human-readable html Cobertura coverage report from results of instrumented tests |
| ====================================================================--> |
| <target name="cobertura.html-report" depends="cobertura.test-instrumented"> |
| <cobertura-report destdir="${coberturareports.html.dir}" |
| datafile="${cobertura.data.dir}/cobertura.ser" |
| format="html"> |
| <fileset dir="${src.dir}"> |
| <include name="**/*.java" /> |
| </fileset> |
| </cobertura-report> |
| </target> |
| |
| <!--======================================================================= |
| install-pentaho-ant-tasks |
| |
| Fetches and installs Pentaho Ant tasks |
| ====================================================================--> |
| <target name="install-pentaho-ant-tasks" depends="install-ivy"> |
| <taskdef-with-ivy task-name="dot-classpath" classname="org.pentaho.anttasks.DotClasspath" organisation="pentaho" module="pentaho-ant-tasks" revision="1.1" /> |
| </target> |
| |
| <!--======================================================================= |
| create-dot-classpath |
| |
| Creates the Eclipse .classpath file from the resolved |
| classpath from Ant. |
| ====================================================================--> |
| <target name="create-dot-classpath" depends="install-pentaho-ant-tasks,init"> |
| <dot-classpath> |
| <!-- Include all lib dirs --> |
| <classpath> |
| <fileset dir="${devlib.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| <fileset dir="${testlib.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| <fileset dir="${lib.dir}"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| </dot-classpath> |
| </target> |
| |
| |
| <!--======================================================================= |
| MACRO: taskdef-with-ivy |
| Downloads (using IVY) and defines new Ant tasks |
| |
| NOTE: any task using this macro must depend on "install-antcontrib" |
| |
| parameters: |
| task-name - Name to give the new Ant task (only used if resource is not set) |
| organisation - Artifact organization (for artifact resolution with IVY) |
| module - Artifact module (for artifact resolution with IVY) |
| revision - Artifact revision (for artifact resolution with IVY) |
| classname - Classname for the Ant task. Used during taskdef and to check |
| if we already have the libraries |
| resource - (optional) Resource defining the Ant task. Used during taskdef |
| ====================================================================--> |
| <macrodef name="taskdef-with-ivy"> |
| <attribute name="task-name" |
| description="Name to give the new Ant task (only used if resource is not set)" |
| default="unset" /> |
| <attribute name="organisation" description="Artifact organization" /> |
| <attribute name="module" description="Artifact module" /> |
| <attribute name="revision" description="Artifact revision" /> |
| <attribute name="classname" |
| description="Classname for the Ant task. Used during taskdef and to check if we already have the libraries." /> |
| <attribute name="resource" |
| description="(optional) Resource defining the Ant task. Used during taskdef" |
| default="unset" /> |
| <sequential> |
| <mkdir dir="${subfloor.resources.dir}/@{module}-@{revision}/" /> |
| <!-- if the library does not exist, we must download it --> |
| <if> |
| <not> |
| <and> |
| <available file="${subfloor.resources.dir}/@{module}-@{revision}" /> |
| <available classname="@{classname}"> |
| <classpath> |
| <fileset dir="${subfloor.resources.dir}/@{module}-@{revision}"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| </available> |
| </and> |
| </not> |
| <then> |
| <ivy:retrieve inline="true" |
| conf="default" |
| organisation="@{organisation}" |
| module="@{module}" |
| revision="@{revision}" |
| pattern="${subfloor.resources.dir}/@{module}-@{revision}/[module]-__-[revision](-[classifier]).[ext]" /> |
| <!-- in case the artifact pulls in an ant jar, remove it. they cause runtime conflicts --> |
| <delete> |
| <fileset dir="${subfloor.resources.dir}/@{module}-@{revision}"> |
| <include name="ant-__-*.jar" /> |
| <include name="ant-launcher-__-*.jar" /> |
| </fileset> |
| </delete> |
| </then> |
| </if> |
| <path id="taskdef.classpath"> |
| <fileset dir="${subfloor.resources.dir}/@{module}-@{revision}"> |
| <include name="*.jar" /> |
| </fileset> |
| </path> |
| <if> |
| <equals arg1="@{resource}" arg2="unset" /> |
| <then> |
| <taskdef classpathref="taskdef.classpath" name="@{task-name}" classname="@{classname}" /> |
| </then> |
| <else> |
| <taskdef classpathref="taskdef.classpath" resource="@{resource}" /> |
| </else> |
| </if> |
| </sequential> |
| </macrodef> |
| |
| |
| <!--======================================================================= |
| Macro which will download the specified library. |
| |
| NOTE: any task using this macro must depend on "install-antcontrib" |
| |
| parameters: |
| name - The name of the library (the filename w/o extension) |
| url - The URL from which the library will be downloaded |
| resource - The name of the resource which should be loaded |
| as a task definition |
| classname - A class file name which can be used to detect if the |
| property library exists |
| extension - The extension of the library being downloaded |
| (defaults to zip) |
| ====================================================================--> |
| <macrodef name="download-antlib"> |
| <attribute name="name" /> |
| <attribute name="url" /> |
| <attribute name="classname" /> |
| <attribute name="extension" default="zip" /> |
| <sequential> |
| <mkdir dir="${subfloor.resources.dir}/@{name}/" /> |
| <!-- if the library does not exist, we must download it --> |
| <if> |
| <not> |
| <and> |
| <available file="${subfloor.resources.dir}/@{name}" /> |
| <available classname="@{classname}"> |
| <classpath> |
| <fileset dir="${subfloor.resources.dir}/@{name}"> |
| <include name="**/*.jar" /> |
| </fileset> |
| </classpath> |
| </available> |
| </and> |
| </not> |
| <then> |
| <!-- if it is a zip file, unzip it ... otherwise if a jar, just download it --> |
| <if> |
| <equals arg1="zip" arg2="@{extension}" /> |
| <then> |
| <!-- download the source file to a temp directory --> |
| <echo message="downloading library @{name} [@{name}.@{extension} from @{url}]" /> |
| <mkdir dir="${subfloor.tmp.dir}" /> |
| <get src="@{url}" dest="${subfloor.tmp.dir}/@{name}.@{extension}" usetimestamp="true" /> |
| <unzip src="${subfloor.tmp.dir}/@{name}.@{extension}" |
| dest="${subfloor.resources.dir}/@{name}" |
| overwrite="true" /> |
| </then> |
| <else> |
| <get src="@{url}" dest="${subfloor.resources.dir}/@{name}/@{name}.@{extension}" usetimestamp="true" /> |
| </else> |
| </if> |
| </then> |
| </if> |
| </sequential> |
| </macrodef> |
| |
| <!--======================================================================= |
| install-tattletale |
| |
| (Fetches and) installs TATTLETALE for use by this ant script |
| ====================================================================--> |
| <target name="install-tattletale" depends="install-antcontrib"> |
| <if> |
| <istrue value="${tattletale.isinstalled}" /> |
| <then> |
| <echo message="Skipping TATTLETALE install. TATTLETALE has already been configured by the build" /> |
| </then> |
| <else> |
| <download-antlib name="tattletale" |
| url="${tattletale.url}" |
| classname="${tattletale.classname}" |
| extension="zip"/> |
| |
| <taskdef name="tattletale.report" classname="${tattletale.classname}"> |
| <classpath> |
| <fileset dir="${subfloor.resources.dir}/tattletale"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| </taskdef> |
| |
| <property name="tattletale.isinstalled" value="true" /> |
| </else> |
| </if> |
| </target> |
| |
| <!--======================================================================= |
| tattletale-report |
| |
| Generates a tattletale report for this project |
| ====================================================================--> |
| <target name="tattletale-report" depends="install-tattletale,jar"> |
| <tattletale.report source="${basedir}" destination="${tattletale.reports.dir}"/> |
| </target> |
| |
| <!--======================================================================= |
| install-sonar |
| |
| (Fetches and) installs SONAR ant plugin for use by this ant script |
| ====================================================================--> |
| <target name="install-sonar" depends="install-antcontrib"> |
| <if> |
| <istrue value="${sonar.isinstalled}" /> |
| <then> |
| <echo message="Skipping SONAR install. SONAR has already been configured by the build" /> |
| </then> |
| <else> |
| <download-antlib name="sonar" |
| url="${sonar.url}" |
| classname="${sonar.classname}" |
| extension="jar"/> |
| |
| <taskdef uri="antlib:org.sonar.ant" resource="org/sonar/ant/antlib.xml"> |
| <classpath> |
| <fileset dir="${subfloor.resources.dir}/sonar"> |
| <include name="*.jar" /> |
| </fileset> |
| </classpath> |
| </taskdef> |
| |
| <property name="sonar.isinstalled" value="true" /> |
| </else> |
| </if> |
| </target> |
| |
| <!--======================================================================= |
| sonar |
| |
| Execute the sonar analysis and publish to a sonar server specified by: |
| sonar.jdbc.url |
| sonar.jdbc.driverClassName |
| sonar.jdbc.username |
| sonar.jdbc.password |
| sonar.host.url |
| ====================================================================--> |
| <target name="sonar" depends="install-sonar, compile, test, cobertura"> |
| <property name="sonar.sources" value="${src.dir}" /> |
| <property name="sonar.binaries" value="${classes.dir}" /> |
| <property name="sonar.tests" value="${testsrc.dir}" /> |
| <property name="sonar.libraries" value="${lib.dir}" /> |
| |
| <property name="sonar.dynamicAnalysis" value="reuseReports" /> |
| <property name="sonar.cobertura.reportPath" value="${coberturareports.xml.dir}/coverage.xml" /> |
| <property name="sonar.surefire.reportsPath" value="${testreports.xml.dir}" /> |
| |
| <sonar:sonar key="${ivy.artifact.group}:${ivy.artifact.id}" version="${project.revision}" xmlns:sonar="antlib:org.sonar.ant"/> |
| </target> |
| |
| </project> |