383 lines
14 KiB
XML
383 lines
14 KiB
XML
<project name="common" default="jar" basedir=".">
|
|
<!--
|
|
OpenSymphony Common Build
|
|
=========================
|
|
TODO (Introduction)
|
|
|
|
Layout
|
|
=========================
|
|
TODO
|
|
|
|
Overriding
|
|
=========================
|
|
TODO
|
|
Example: <target name="compile" depends="myPreCompile,common.compile,myPostCompile"/>
|
|
|
|
-->
|
|
<!-- NOTE: this property is purely here to make a clear distinction in IDEA where the common build is -->
|
|
<property name="------common-properties-below------" value="Common properties below:"/>
|
|
|
|
<property name="compile.version" value="1.3"/>
|
|
<property name="test.compile.version" value="1.3"/>
|
|
|
|
<dirname property="common.dir" file="${ant.file.common}"/>
|
|
<property file="build.properties"/>
|
|
<property file="release.properties"/>
|
|
<property file="ivyrep.properties"/>
|
|
|
|
<property name="lib" location="lib"/>
|
|
<property name="lib.core" value="${lib}/core"/>
|
|
<property name="lib.build" value="${lib}/build"/>
|
|
<property name="lib.optional" value="${lib}/optional"/>
|
|
|
|
<property name="src" location="src"/>
|
|
<property name="src.java" value="${src}/java"/>
|
|
|
|
<property name="test" value="${src}/test"/>
|
|
<property name="src.test" value="${test}/java"/>
|
|
|
|
<property name="build" location="build"/>
|
|
<property name="build.test" value="${build}/test"/>
|
|
<property name="build.java-test" value="${build}/java-test"/>
|
|
<property name="build.java" value="${build}/java"/>
|
|
<property name="build.clover" value="${build}/clover"/>
|
|
<property name="dist" location="dist"/>
|
|
|
|
<property name="docs" location="docs"/>
|
|
<property name="docs.packages" value="com.opensymphony.*"/>
|
|
|
|
<property name="jar.manifest" value="${common.dir}/EMPTY.MF"/>
|
|
<property name="jar.excludes" value=""/>
|
|
|
|
<property name="testcase" value="*"/>
|
|
<patternset id="src.test.pattern">
|
|
<exclude name="**/Abstract*.java"/>
|
|
<include name="**/${testcase}Test.java"/>
|
|
<include name="**/${testcase}TestCase.java"/>
|
|
</patternset>
|
|
|
|
<path id="cp">
|
|
<fileset dir="lib">
|
|
<include name="**/*.jar"/>
|
|
<include name="**/*.zip"/>
|
|
<exclude name="**/jalopy/**"/>
|
|
</fileset>
|
|
</path>
|
|
|
|
<path id="junit.cp">
|
|
<pathelement location="${build.test}"/>
|
|
<pathelement location="${build.java-test}"/>
|
|
<path refid="cp"/>
|
|
</path>
|
|
|
|
<available property="junit.available" classname="junit.framework.TestCase"/>
|
|
<available property="clover.available" classname="org.apache.tools.ant.taskdefs.CloverCompilerAdapter"/>
|
|
|
|
<target name="init" depends="init-anthill, init-standalone">
|
|
<tstamp/>
|
|
</target>
|
|
|
|
<!-- in Anthill, the docs should be the Intranet copyDir -->
|
|
<target name="init-anthill" if="anthill.copyDir">
|
|
<property name="dist.docs" value="${anthill.copyDir}"/>
|
|
</target>
|
|
|
|
<!-- when building Standalone, the docs should be the normal place -->
|
|
<target name="init-standalone" unless="anthill.copyDir">
|
|
<property name="dist.docs" value="${dist}/docs"/>
|
|
</target>
|
|
|
|
<target name="junit-check" depends="init" unless="junit.available">
|
|
<fail message="Cannot run test cases. Please copy lib/build/junit-3.8.1.jar to ${ant.home}/lib"/>
|
|
</target>
|
|
|
|
<target name="clover-check" depends="init" unless="clover.available">
|
|
<fail message="Cannot run coverage tests. Please copy lib/build/clover.jar and lib/build/clover.license (if it exists) to ${ant.home}/lib"/>
|
|
</target>
|
|
|
|
<target name="clean" depends="init">
|
|
<delete dir="${build}"/>
|
|
<delete dir="${dist}"/>
|
|
</target>
|
|
|
|
<target name="precompile"/>
|
|
|
|
<macrodef name="compile">
|
|
<attribute name="srcdir"/>
|
|
<attribute name="destdir"/>
|
|
<attribute name="classpath" default=""/>
|
|
<attribute name="classpathref" default="cp"/>
|
|
<attribute name="excludes" default=""/>
|
|
<attribute name="source" default="${compile.version}"/>
|
|
<attribute name="target" default="${compile.version}"/>
|
|
<sequential>
|
|
<mkdir dir="@{destdir}"/>
|
|
<javac srcdir="@{srcdir}" destdir="@{destdir}" classpath="@{classpath}" classpathref="@{classpathref}"
|
|
debug="on" source="@{source}" target="@{target}"/>
|
|
<copy filtering="no" todir="@{destdir}">
|
|
<fileset dir="@{srcdir}">
|
|
<exclude name="**/*.java"/>
|
|
<exclude name="**/package.html"/>
|
|
</fileset>
|
|
</copy>
|
|
</sequential>
|
|
</macrodef>
|
|
|
|
<target name="compile" depends="init,precompile" description="compile project">
|
|
<compile srcdir="${src.java}" destdir="${build.java}"/>
|
|
</target>
|
|
|
|
<target name="jar" depends="compile" description="build the project jar file">
|
|
<mkdir dir="${build}"/>
|
|
|
|
<jar basedir="${build.java}" excludes="${jar.excludes}" jarfile="${build}/${name}-${version}.jar"
|
|
manifest="${jar.manifest}">
|
|
<manifest>
|
|
<attribute name="Implementation-Title" value="${fullname}"/>
|
|
<attribute name="Implementation-Version" value="${version}"/>
|
|
<attribute name="Implementation-Vendor" value="OpenSymphony"/>
|
|
</manifest>
|
|
</jar>
|
|
<!-- <jar basedir="${src.java}" jarfile="${build}/${name}-${version}-src.jar">
|
|
<manifest>
|
|
<attribute name="Implementation-Title" value="${fullname}" />
|
|
<attribute name="Implementation-Version" value="${version}" />
|
|
<attribute name="Implementation-Vendor" value="OpenSymphony" />
|
|
</manifest>
|
|
</jar> -->
|
|
</target>
|
|
|
|
<target name="src-jar" depends="init" description="build a jar of the project source code">
|
|
<mkdir dir="${build}"/>
|
|
<jar basedir="${src.java}" jarfile="${build}/${name}-${version}-src.jar">
|
|
<manifest>
|
|
<attribute name="Implementation-Title" value="${fullname}"/>
|
|
<attribute name="Implementation-Version" value="${version}"/>
|
|
<attribute name="Implementation-Vendor" value="OpenSymphony"/>
|
|
</manifest>
|
|
</jar>
|
|
</target>
|
|
|
|
<target name="test-compile" unless="skip.tests">
|
|
<compile srcdir="${src.test}" destdir="${build.test}" classpath="${build.java}"
|
|
source="${test.compile.version}" target="${test.compile.version}"/>
|
|
|
|
<taskdef resource="clovertasks"/>
|
|
<taskdef name="junit" classname="org.apache.tools.ant.taskdefs.optional.junit.JUnitTask"/>
|
|
|
|
<mkdir dir="${build.clover}"/>
|
|
<clover-setup initString="${build.clover}/coverage.db">
|
|
<files>
|
|
<exclude name="${src.test}/**/*.java"/>
|
|
</files>
|
|
</clover-setup>
|
|
|
|
<compile srcdir="${src.java}" destdir="${build.java-test}"/>
|
|
</target>
|
|
|
|
<target name="test" depends="junit-check, clover-check, compile, test-compile" description="run tests"
|
|
unless="skip.tests">
|
|
<run-junit />
|
|
</target>
|
|
|
|
<macrodef name="run-junit">
|
|
<attribute name="classpathref" default="junit.cp" />
|
|
<sequential>
|
|
<mkdir dir="${dist.docs}/junit"/>
|
|
<junit haltonfailure="no" haltonerror="yes" fork="yes" forkmode="once" failureproperty="test.failure">
|
|
<jvmarg value="-Djava.awt.headless=true"/>
|
|
<jvmarg value="-Dorg.xml.sax.driver=org.apache.crimson.parser.XMLReaderImpl"/>
|
|
<classpath>
|
|
<path refid="@{classpathref}"/>
|
|
</classpath>
|
|
|
|
<formatter type="plain" useFile="false"/>
|
|
<formatter type="xml"/>
|
|
|
|
<batchtest todir="${dist.docs}/junit">
|
|
<fileset dir="${src.test}">
|
|
<patternset refid="src.test.pattern"/>
|
|
</fileset>
|
|
</batchtest>
|
|
</junit>
|
|
</sequential>
|
|
</macrodef>
|
|
|
|
<target name="javadocs" description="generate javadocs" depends="init">
|
|
<mkdir dir="${dist.docs}/api"/>
|
|
<javadoc sourcepath="${src.java}"
|
|
destdir="${dist.docs}/api"
|
|
packagenames="${docs.packages}"
|
|
classpathref="cp"
|
|
author="true"
|
|
version="true"
|
|
overview="${src.java}/overview.html"
|
|
windowTitle="${fullname} API - ${version}"
|
|
doctitle="${fullname} API (${version})"
|
|
footer="<a href="http://www.opensymphony.com/${name}/" target="_top">${fullname} Project Page</a>"
|
|
use="true"
|
|
verbose="false">
|
|
<link href="http://java.sun.com/j2se/${compile.version}/docs/api/"/>
|
|
<link href="http://java.sun.com/j2ee/${compile.version}/docs/api/"/>
|
|
</javadoc>
|
|
<!-- <copy overwrite="yes" file="${docs}/main.css" tofile="${docs}/api/stylesheet.css"/> -->
|
|
</target>
|
|
|
|
<target name="docs.impl">
|
|
<copy todir="${dist.docs}">
|
|
<fileset dir="${docs}"/>
|
|
</copy>
|
|
</target>
|
|
|
|
<target name="reports" depends="junit.report, clover.report, javadocs"
|
|
description="generate javadocs and junit and coverage reports"/>
|
|
|
|
<target name="docs" depends="reports, docs.impl"/>
|
|
|
|
<target name="clover.report" depends="test" description="generate coverage reports" unless="skip.tests">
|
|
<clover-report>
|
|
<current outfile="${dist.docs}/clover">
|
|
<format type="html"/>
|
|
</current>
|
|
</clover-report>
|
|
</target>
|
|
|
|
<target name="clover.historical" depends="clover.report" description="generate coverage historical reports"
|
|
unless="skip.tests">
|
|
<clover-historypoint historyDir="${build.clover}"/>
|
|
|
|
<clover-report>
|
|
<historical outfile="${dist.docs}/clover" historyDir="${build.clover}">
|
|
<format type="html"/>
|
|
</historical>
|
|
</clover-report>
|
|
</target>
|
|
|
|
<target name="junit.report" depends="test" description="generate junit reports" unless="skip.tests">
|
|
<junitreport todir="${dist.docs}/junit">
|
|
<fileset dir="${dist.docs}/junit">
|
|
<include name="TEST-*.xml"/>
|
|
</fileset>
|
|
<report format="frames" todir="${dist.docs}/junit"/>
|
|
</junitreport>
|
|
|
|
<!-- we fail here (instead of in the test target) so that the reports get generated first) -->
|
|
<fail if="test.failure" message="Tests did not all pass, failing!"/>
|
|
</target>
|
|
|
|
<target name="predist"/>
|
|
|
|
<target name="predist.zip"/>
|
|
|
|
<target name="dist" depends="jar, docs, predist" description="generate distribution zip file">
|
|
<copy todir="${dist}">
|
|
<fileset dir="${build}">
|
|
<include name="*.jar"/>
|
|
</fileset>
|
|
</copy>
|
|
|
|
<copy todir="${dist}/src">
|
|
<fileset dir="${src}"/>
|
|
</copy>
|
|
|
|
<mkdir dir="${dist}/lib"/>
|
|
<copy todir="${dist}/lib">
|
|
<fileset dir="${lib}">
|
|
<exclude name="**/no_dist/**"/>
|
|
</fileset>
|
|
</copy>
|
|
|
|
<copy todir="${dist}">
|
|
<fileset dir="${basedir}">
|
|
<include name="*build.*"/>
|
|
<include name="readme.txt"/>
|
|
<include name="license.txt"/>
|
|
</fileset>
|
|
</copy>
|
|
|
|
<!-- give a chance for project builds to do more before the zip is made. -->
|
|
<antcall target="predist.zip"/>
|
|
|
|
<zip zipfile="${build}/${name}-${version}.zip" basedir="${dist}">
|
|
<exclude name="docs/clover/**/*"/>
|
|
<exclude name="docs/junit/**/*"/>
|
|
</zip>
|
|
</target>
|
|
|
|
<target name="website" depends="javadocs, docs.impl"/>
|
|
|
|
<target name="ivyrep" depends="jar">
|
|
<tstamp>
|
|
<format property="TIME" pattern="yyyyMMddHHmmss"/>
|
|
</tstamp>
|
|
|
|
<!-- make sure we have the latest -->
|
|
<echo>svn update</echo>
|
|
<exec executable="svn">
|
|
<arg value="update"/>
|
|
<arg line="${ivyrep.path}/opensymphony/${name}"/>
|
|
</exec>
|
|
|
|
<!-- delete the old timestamped builds and commit -->
|
|
<fileset dir="${ivyrep.path}/opensymphony/${name}" id="filesref">
|
|
<include name="${name}-${version}-*"/>
|
|
<include name="ivy-${version}-*"/>
|
|
</fileset>
|
|
<pathconvert property="files" refid="filesref" pathsep=" "/>
|
|
<echo>svn delete: ${files}</echo>
|
|
<exec executable="svn">
|
|
<arg value="delete"/>
|
|
<arg line="${files}"/>
|
|
</exec>
|
|
|
|
<!-- copy over the new build -->
|
|
<copy file="${build}/${name}-${version}.jar"
|
|
tofile="${ivyrep.path}/opensymphony/${name}/${name}-${version}-${TIME}.jar"/>
|
|
<echo>svn add (jar)</echo>
|
|
<exec executable="svn">
|
|
<arg value="add"/>
|
|
<arg value="${ivyrep.path}/opensymphony/${name}/${name}-${version}-${TIME}.jar"/>
|
|
</exec>
|
|
|
|
<antcall target="ivyrep.copy-ivy"/>
|
|
<exec executable="svn">
|
|
<arg value="add"/>
|
|
<arg value="${ivyrep.path}/opensymphony/${name}/ivy-${version}-${TIME}.xml"/>
|
|
</exec>
|
|
|
|
<!-- now commit everything -->
|
|
<echo>svn commit</echo>
|
|
<exec executable="svn">
|
|
<arg value="commit"/>
|
|
<arg value="--username"/>
|
|
<arg value="${ivyrep.username}"/>
|
|
<arg value="--password"/>
|
|
<arg value="${ivyrep.password}"/>
|
|
<arg value="--non-interactive"/>
|
|
<arg value="-m"/>
|
|
<arg value="automatic commit"/>
|
|
<arg value="${ivyrep.path}/opensymphony/${name}"/>
|
|
</exec>
|
|
</target>
|
|
|
|
<target name="ivyrep.copy-ivy">
|
|
<!--
|
|
Note: Default implementation does not use Ivy itself to generate these files.
|
|
However, Ivy is really the best way to generate these, so projects that
|
|
do use Ivy should override this target like so:
|
|
|
|
<ivy-deliver deliverpattern="${ivyrep.path}/opensymphony/${name}/[artifact]-[revision].[ext]"
|
|
pubrevision="${version}-${TIME}" pubdate="${TIME}"/>
|
|
|
|
Over time as more projects adopt Ivy, this may become built in to the
|
|
common build.
|
|
-->
|
|
<copy file="ivy.xml" tofile="${ivyrep.path}/opensymphony/${name}/ivy-${version}-${TIME}.xml">
|
|
<filterset id="ivy.filter">
|
|
<filter token="VERSION" value="${version}-${TIME}"/>
|
|
<filter token="STATUS" value="${status}"/>
|
|
<filter token="PUBLICATION" value="${TIME}"/>
|
|
</filterset>
|
|
</copy>
|
|
</target>
|
|
</project>
|