blob: 484b067f7619700f0b1ba95feb2c62993d17cf50 [file] [log] [blame]
<!--
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
https://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 name="common" xmlns:ivy="antlib:org.apache.ivy.ant">
<!-- a sample common ant build file, used for ivy multi-project tutorial
feel free to copy and adapt it to your own needs
Note that the only targets specific to ivy are:
load-ivy
resolve
report
ivy-new-version
publish
publish-local
All other targets are usual ant based targets, which could have been written
in a build not depending at all on ivy:
resolve constructs a lib directory based upon ivy dependencies, and then the lib dir
is used as in any classical ant build
-->
<property file="${common.dir}/build.properties"/>
<property name="ivy.jar.dir" value="${user.home}/.ivy2/jars"/>
<property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar"/>
<!-- =================================
target: load-ivy
this target is not necessary if you put ivy.jar in your ant lib directory
if you already have ivy 2.0 in your ant lib, you can simply remove this
target
================================= -->
<target name="load-ivy">
<!-- try to load ivy here from home 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).
We will not fail as long as ivy home lib dir exists (it may be empty) and
ivy is in at least one of ant's lib dir or the ivy home lib dir. -->
<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>
<path id="lib.path.id">
<fileset dir="${lib.dir}"/>
</path>
<path id="run.path.id">
<path refid="lib.path.id"/>
<path location="${classes.dir}"/>
</path>
<!-- setup ivy default configuration with some custom info -->
<property name="ivy.local.default.root" value="${repository.dir}/local"/>
<property name="ivy.shared.default.root" value="${repository.dir}/shared"/>
<!-- here is how we would have configured ivy if we had our own ivysettings file
<ivy:settings file="${common.dir}/ivysettings.xml"/>
-->
<!-- =================================
target: resolve
================================= -->
<target name="resolve" depends="clean-lib, load-ivy" description="--> resolve and retrieve dependencies with ivy">
<mkdir dir="${lib.dir}"/> <!-- not usually necessary, ivy creates the directory IF there are dependencies -->
<!-- the call to resolve is not mandatory, retrieve makes an implicit call if we don't -->
<ivy:resolve file="${ivy.file}"/>
<ivy:retrieve pattern="${lib.dir}/[artifact].[ext]"/>
</target>
<!-- =================================
target: report
================================= -->
<target name="report" depends="resolve" description="--> generates a report of dependencies">
<ivy:report todir="${build.dir}"/>
</target>
<!-- =================================
target: compile
================================= -->
<target name="compile" depends="resolve" description="--> compile the project">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="lib.path.id" debug="true" includeAntRuntime="false"/>
</target>
<!-- =================================
target: run
================================= -->
<target name="run" depends="version, compile" description="--> compile and run the project">
<java classpathref="run.path.id" classname="${main.class.name}"/>
</target>
<target name="ivy-new-version" depends="load-ivy" unless="ivy.new.revision">
<!-- default module version prefix value -->
<property name="module.version.prefix" value="${module.version.target}-dev-b"/>
<!-- asks to ivy an available version number -->
<ivy:info file="${ivy.file}"/>
<ivy:buildnumber
organisation="${ivy.organisation}" module="${ivy.module}"
revision="${module.version.prefix}" defaultBuildNumber="1" revSep=""/>
</target>
<target name="local-version">
<tstamp>
<format property="now" pattern="yyyyMMddHHmmss"/>
</tstamp>
<property name="ivy.new.revision" value="${module.version.target}-local-${now}"/>
</target>
<target name="version" depends="ivy-new-version">
<!-- create version file in classpath for later inclusion in jar -->
<mkdir dir="${classes.dir}"/>
<echo message="version=${ivy.new.revision}" file="${classes.dir}/${ant.project.name}.properties" append="false"/>
<!-- load generated version properties file -->
<property file="${classes.dir}/${ant.project.name}.properties"/>
</target>
<!-- =================================
target: jar
================================= -->
<target name="jar" depends="version, compile" description="--> make a jar file for this project">
<jar destfile="${jar.file}">
<fileset dir="${classes.dir}"/>
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Build-Version" value="${version}"/>
</manifest>
</jar>
</target>
<!-- =================================
target: publish
================================= -->
<target name="publish" depends="clean-build, jar" description="--> publish this project in the ivy repository">
<ivy:publish artifactspattern="${build.dir}/[artifact].[ext]"
resolver="shared"
pubrevision="${version}"
status="release"/>
<echo message="project ${ant.project.name} released with version ${version}"/>
</target>
<!-- =================================
target: publish-local
================================= -->
<target name="publish-local" depends="local-version, jar" description="--> publish this project in the local ivy repository">
<ivy:publish artifactspattern="${build.dir}/[artifact].[ext]"
resolver="local"
pubrevision="${version}"
pubdate="${now}"
status="integration"
forcedeliver="true"/>
<echo message="project ${ant.project.name} published locally with version ${version}"/>
</target>
<!-- =================================
target: clean-local
================================= -->
<target name="clean-local" depends="load-ivy"
description="--> cleans the local repository for the current module">
<ivy:info file="${ivy.file}"/>
<delete dir="${ivy.local.default.root}/${ivy.organisation}/${ivy.module}"/>
</target>
<!-- =================================
target: clean-lib
================================= -->
<target name="clean-lib" description="--> clean the project libraries directory (dependencies)">
<delete includeemptydirs="true" dir="${lib.dir}"/>
</target>
<!-- =================================
target: clean-build
================================= -->
<target name="clean-build" description="--> clean the project built files">
<delete includeemptydirs="true" dir="${build.dir}"/>
</target>
<!-- =================================
target: clean
================================= -->
<target name="clean" depends="clean-build,clean-lib" description="--> clean the project"/>
</project>