+++ /dev/null
-<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>