<!-- $Id: build.xml,v 1.57 2009/07/23 06:48:27 jhunter Exp $ --> <!-- For instructions on how to build JDOM, please view the README.txt file. --> <project default="package" basedir="."> <!-- =================================================================== --> <!-- Initialization target --> <!-- =================================================================== --> <tstamp > <format property="snapshot.time" pattern="yyyy.MM.dd.HH.mm" /> <format property="year" pattern="yyyy" /> </tstamp> <!-- Give user a chance to override without editing this file (and without using -D arguments each time they build). The build properties a user is likely to override include: - lib.dir The directory where to look for the default JAR files. Defaults to ./lib - xml-apis.jar The JAR containing the DOM, SAX and JAXP classes. Defaults to ${lib.dir}/xml-apis.jar - parser.jar The JAR containing the XML parser to use. Defaults to ${lib.dir}/xerces.jar - jaxen.lib.dir The directory containing the Jaxen JAR libraries. Defaults to ${lib.dir} --> <property file="${user.home}/jdom.build.properties" /> <property file="${basedir}/build.properties" /> <property name="Name" value="JDOM"/> <property name="name" value="jdom"/> <property name="version" value="2.x-${snapshot.time}"/> <property name="version.impl" value="${version}"/> <property name="version.spec" value="2.0.0"/> <property name="gpg" value="gpg" description="Path to the GNU gpg program for maven target"/> <property name="jarbase" value="${name}-${version}" /> <property name="instrument" value="true" /> <echo message="----------- ${Name} ${version} ------------"/> <property name="compile.debug" value="true" /> <property name="compile.optimize" value="true" /> <property name="compile.target" value="1.5" /> <property name="compile.source" value="1.5" /> <property name="compile.deprecation" value="true" /> <property name="build" value="./build"/> <property name="core" value="./core" /> <property name="core.src" value="${core}/src/java" /> <property name="core.build" value="${build}/core" /> <property name="about" value="./core/package" /> <property name="about.src" value="${about}" /> <property name="about.build" value="${build}/about" /> <property name="metainf" value="./core/package/META-INF" /> <property name="metainf.build" value="${build}/META-INF" /> <property name="contrib" value="./contrib" /> <property name="contrib.src" value="${contrib}/src/java" /> <property name="contrib.build" value="${build}/contrib" /> <property name="junit" value="./test" /> <property name="junit.src" value="${junit}/src/java" /> <property name="junit.resources" value="${junit}/src/resources" /> <property name="junit.build" value="${build}/junit" /> <property name="junit.xml" value="${build}/junit.xml" /> <property name="junit.report" value="${build}/junit.report" /> <property name="junit.instrumented" value="${build}/instrumented" /> <property name="samples" value="./core/samples/" /> <property name="samples.src" value="${samples}/" /> <property name="samples.build" value="${build}/samples"/> <!-- Do not set a stax.dir but it is available for override (for Java5 for example) --> <property name="stax.dir" value="dummy" /> <property name="lib.dir" value="./lib"/> <property name="packages" value="org.jdom2.*"/> <property name="build.javadocs" value="${build}/apidocs"/> <property name="package" value="${build}/package"/> <property name="coverage.out" value="${build}/coverage" /> <property name="mavendir" value="${build}/maven" /> <filter token="year" value="${year}"/> <filter token="version" value="${version}"/> <filter token="date" value="${TODAY}"/> <filter token="jdk" value="${compile.target}" /> <!-- Default JAR libraries --> <property name="parser.jar" value="${lib.dir}/xercesImpl.jar" /> <property name="xmlapi.jar" value="${lib.dir}/xml-apis.jar" /> <property name="jaxen.jar" value="${lib.dir}/jaxen-1.1.6.jar" /> <property name="junit.jar" value="${lib.dir}/junit-4.8.2.jar" /> <property name="isorelax.jar" value="${contrib}/lib/isorelax.jar" /> <property name="xalan.jar" value="${lib.dir}/xalan/xalan-2.7.1.jar" /> <property name="xalanser.jar" value="${lib.dir}/xalan/serializer-2.7.1.jar" /> <!-- Compilation class path --> <path id="base.class.path"> <pathelement location="${jaxen.jar}" /> <pathelement location="${parser.jar}" /> <pathelement location="${xmlapi.jar}" /> <pathelement location="${junit.jar}" /> <pathelement location="${isorelax.jar}" /> <pathelement location="${xalan.jar}" /> <pathelement location="${xalanser.jar}" /> <!-- normally these stax jars will not be found --> <!-- this is used for testing Java5 (the test sets stax.dir) --> <pathelement location="${stax.dir}/jsr173_1.0_api.jar" /> <pathelement location="${stax.dir}/sjsxp.jar" /> </path> <path id="core.class.path"> <path refid="base.class.path"/> <pathelement location="${core.build}"/> </path> <path id="contrib.class.path"> <path refid="core.class.path"/> <pathelement location="${contrib.build}"/> </path> <path id="junit.class.path"> <pathelement location="${junit.instrumented}" /> <pathelement location="${junit.build}"/> <path refid="contrib.class.path"/> <fileset dir="${lib.dir}/cobertura" includes="*.jar" /> </path> <!-- =================================================================== --> <!-- Help on usage --> <!-- =================================================================== --> <target name="usage"> <echo message=""/> <echo message=""/> <echo message="JDOM Build file"/> <echo message="-------------------------------------------------------------"/> <echo message=""/> <echo message=" available targets are:"/> <echo message=""/> <echo message=" - package [default] -> generates ./build/jdom2.jar and other supporting files"/> <echo message=" - compile -> compiles the source code"/> <echo message=" - javadoc -> generates the API documentation in ./build/javadocs"/> <echo message=" - junit -> runs the JUnit tests"/> <echo message=" - coverage -> generates test coverage metrics"/> <echo message=" - eclipse -> generates an Eclipse project (source folders, jars, etc)"/> <echo message=" - clean -> restores the distribution to its original and clean state"/> <echo message=" - maven -> Prepares a package-upload for maven-central"/> <echo message=""/> <echo message=" See the comments inside the build.xml file for more details."/> <echo message="-------------------------------------------------------------"/> <echo message=""/> <echo message=""/> </target> <!-- =================================================================== --> <!-- Prepares the build directory --> <!-- =================================================================== --> <target name="prepare"> <mkdir dir="${build}"/> <mkdir dir="${core.build}"/> <mkdir dir="${about.build}"/> <mkdir dir="${samples.build}"/> <mkdir dir="${junit.build}"/> <mkdir dir="${contrib.build}"/> <mkdir dir="${metainf.build}"/> </target> <!-- =================================================================== --> <!-- Compiles the source directory --> <!-- =================================================================== --> <target name="compile.core" depends="prepare" description="Compiles the core source code"> <!-- Copy resources and stuff - everything except Java code --> <copy todir="${core.build}" > <fileset dir="${core.src}" excludes="**/*.java" /> </copy> <javac srcdir="${core.src}" destdir="${core.build}" debug="${compile.debug}" optimize="${compile.optimize}" target="${compile.target}" source="${compile.source}" deprecation="${compile.deprecation}" includeantruntime="false"> <classpath refid="base.class.path"/> </javac> </target> <target name="compile.samples" depends="compile.core, compile.contrib" description="Compiles the sample source code"> <!-- Copy resources and stuff - everything except Java code --> <copy todir="${samples.build}" > <fileset dir="${samples.src}" excludes="**/*.java" /> </copy> <javac srcdir="${samples.src}" destdir="${samples.build}" debug="${compile.debug}" optimize="${compile.optimize}" target="${compile.target}" source="${compile.source}" deprecation="${compile.deprecation}" includeantruntime="false"> <classpath refid="contrib.class.path" /> </javac> </target> <target name="compile.contrib" depends="compile.core" description="Compiles the contrib source code"> <!-- Copy resources and stuff - everything except Java code --> <copy todir="${contrib.build}" > <fileset dir="${contrib.src}" excludes="**/*.java" /> </copy> <javac srcdir="${contrib.src}" destdir="${contrib.build}" debug="${compile.debug}" optimize="${compile.optimize}" target="${compile.target}" source="${compile.source}" deprecation="${compile.deprecation}" includeantruntime="false"> <classpath refid="core.class.path" /> </javac> </target> <target name="compile.junit" depends="compile.core, compile.contrib" description="Compiles the junit source code"> <!-- Copy resources and stuff - everything except Java code --> <copy todir="${junit.build}" > <fileset dir="${junit.src}" excludes="**/*.java" /> <fileset dir="${junit.resources}" /> </copy> <!-- ignore deprecation warnings in jUnit --> <javac srcdir="${junit.src}" destdir="${junit.build}" debug="${compile.debug}" optimize="${compile.optimize}" target="${compile.target}" source="${compile.source}" deprecation="no" includeantruntime="false"> <classpath refid="contrib.class.path" /> </javac> </target> <target name="compile" depends="compile.core, compile.junit, compile.contrib, compile.samples" description="Compiles all JDOM code (core, samples, junit, contrib)" /> <!-- =================================================================== --> <!-- Creates the API documentation --> <!-- =================================================================== --> <target name="javadoc" depends="prepare" description="Creates the API documentation"> <mkdir dir="${build.javadocs}"/> <javadoc packagenames="${packages}" sourcepath="${core.src}" destdir="${build.javadocs}" author="true" version="true" use="true" splitindex="true" noindex="false" windowtitle="${Name} v${version}" doctitle="${Name} v${version}<br>API Specification" header="<b>${Name}<br><font size='-1'>${version}</font></b>" bottom="Copyright © ${year} Jason Hunter, Brett McLaughlin. All Rights Reserved."> <classpath refid="base.class.path"/> </javadoc> </target> <!-- =================================================================== --> <!-- Creates the jars --> <!-- =================================================================== --> <target name="jars" depends="compile, javadoc" description="Builds the Jars"> <fixcrlf srcdir="." includes="**/*.bat" excludes="build*.*" eol="crlf"/> <fixcrlf srcdir="." includes="**/*.sh" excludes="build*.*" eol="lf"/> <!-- Filters defined specifically for updating the manifest --> <filter token="version.spec" value="${version.spec}"/> <filter token="version.impl" value="${version.impl}"/> <copy todir="${metainf.build}/META-INF" filtering="yes"> <fileset dir="${metainf}"/> <fileset dir="."> <include name="LICENSE.txt"/> </fileset> </copy> <jar jarfile="${package}/${jarbase}.jar" manifest="${metainf.build}/META-INF/MANIFEST.MF"> <fileset dir="${core.build}" includes="**/*.class" /> <fileset dir="${metainf.build}" excludes="**/MANIFEST.MF" /> </jar> <jar jarfile="${package}/${jarbase}-contrib.jar" > <fileset dir="${contrib.build}" includes="**/*" /> <fileset dir="${metainf.build}" excludes="**/MANIFEST.MF" /> </jar> <jar jarfile="${package}/${jarbase}-junit.jar" > <fileset dir="${junit.build}" includes="**/*" /> <fileset dir="${metainf.build}" excludes="**/MANIFEST.MF" /> </jar> <jar destfile="${package}/${jarbase}-javadoc.jar" basedir="${build.javadocs}" includes="**/*" /> <jar jarfile="${package}/${jarbase}-sources.jar" > <fileset dir="${core.src}" includes="**/*" /> <fileset dir="${junit.src}" includes="**/*" /> <fileset dir="${contrib.src}" includes="**/*" /> </jar> </target> <target name="androidtests" depends="jars"> <property name="android.project" value="JUT" /> <property name="android" value="${build}/android" /> <property name="android.libs" value="${android}/${android.project}/libs" /> <mkdir dir="${android}" /> <mkdir dir="${android.libs}" /> <path id="at.class.path"> <pathelement location="${package}/${jarbase}.jar" /> <pathelement location="${package}/${jarbase}-contrib.jar" /> <pathelement location="${package}/${jarbase}-junit.jar" /> <path refid="base.class.path"/> </path> <!-- Convert the test cases from JUnit4 to a JUnit3 format --> <!-- This also copies the resources only. --> <java classname="org.jdom2.contrib.android.TranslateTests" classpathref="at.class.path" > <arg value="${package}/${jarbase}-junit.jar" /> <arg value="${android}/${android.project}Test/src" /> </java> <copy todir="${android.libs}"> <fileset dir="${package}" includes="${jarbase}.jar, ${jarbase}-contrib.jar ${jarbase}-junit.jar" /> </copy> <copy todir="${android.libs}" file="${jaxen.jar}"/> <copy todir="${android.libs}" file="${xalan.jar}"/> <copy todir="${android.libs}" file="${xalanser.jar}"/> <copy todir="${android.libs}" file="${junit.jar}"/> </target> <!-- =================================================================== --> <!-- Creates the class package --> <!-- =================================================================== --> <target name="package" depends="coverage, jars" description="Creates the class package"> <zip destfile="${package}/${jarbase}.zip"> <fileset dir="${package}" includes="${jarbase}*.jar" /> <fileset dir="${basedir}" includes="lib/xerces* lib/jaxen* lib/xml*" /> <fileset dir="${basedir}" includes="LICENSE.txt README.txt" /> </zip> </target> <!-- =================================================================== --> <!-- Clean targets --> <!-- =================================================================== --> <target name="clean" description="Removes build files"> <delete dir="${build}" failonerror="false"/> </target> <!-- =================================================================== --> <!-- JUnit and Test Coverage targets --> <!-- =================================================================== --> <target name="coverage.setup" description="Set up code-coverage metrics" depends="compile.core"> <taskdef classpathref="junit.class.path" resource="tasks.properties"/> <delete dir="${junit.instrumented}"/> <mkdir dir="${junit.instrumented}" /> <property name="cobertura.datafile" value="${junit.instrumented}/cobertura.ser"/> <cobertura-instrument todir="${junit.instrumented}" datafile="${cobertura.datafile}"> <fileset dir="${core.build}"> <include name="**/*.class"/> <!-- exclude name="**/**/jaxen/**/*.class"/ --> </fileset> </cobertura-instrument> <property name="forkjunit" value="true" /> </target> <target name="junit.nodeps" description="Run all the JUnit tests, but do not compile anything first"> <delete dir="${junit.report}" /> <mkdir dir="${junit.report}" /> <delete dir="${junit.xml}" /> <mkdir dir="${junit.xml}" /> <!-- We need to fork to get the resources on the classpath --> <!-- Otherwise we rely on ant's ClassLoader which does not do resources nicely --> <junit fork="true" forkmode="once" haltonerror="false" haltonfailure="false" failureproperty="junit.failed" printsummary="true" timeout="100000" showoutput="true" includeantruntime="true" > <sysproperty key="net.sourceforge.cobertura.datafile" file="${cobertura.datafile}" /> <classpath refid="junit.class.path" /> <formatter type="xml"/> <batchtest haltonerror="false" haltonfailure="false" failureproperty="junit.failed" todir="${junit.xml}" > <sort> <name /> <fileset dir="${junit.src}"> <include name="**/Test*.java"/> <exclude name="**/generate/**" /> </fileset> </sort> </batchtest> </junit> <junitreport todir="${junit.report}"> <fileset dir="${junit.xml}"> <include name="TEST-*.xml"/> </fileset> <report format="frames" todir="${junit.report}"/> </junitreport> </target> <target name="junit" depends="compile.core, compile.junit, junit.nodeps" description="Compile code required for JUnit, then run JUnit tests"/> <target name="coverage" depends="coverage.setup, junit" description="Run the code coverage tool."> <delete dir="${coverage.out}"/> <mkdir dir="${coverage.out}" /> <cobertura-report srcdir="${core.src}" destdir="${coverage.out}" datafile="${cobertura.datafile}"/> <echo message="See ${coverage.out}/index.html for results." /> </target> <!-- =================================================================== --> <!-- Eclipse targets --> <!-- =================================================================== --> <target name="eclipse" description="Set up your eclipse project (source folders, jars, etc.)"> <echo file="./.classpath" xml:space="preserve"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="core/src/java"/> <classpathentry kind="src" path="core/package"/> <classpathentry kind="src" path="core/samples"/> <classpathentry kind="src" path="test/src/java"/> <classpathentry kind="src" path="test/src/resources"/> <classpathentry kind="src" path="contrib/src/java" excluding="org/jdom/contrib/ids/doc-files/|org/jdom/contrib/input/scanner/doc-files/|org/jdom2/contrib/ids/doc-files/|org/jdom2/contrib/ids/doc-files/|org/jdom2/contrib/input/scanner/doc-files/|org/jdom2/contrib/input/scanner/doc-files/"/> <classpathentry kind="src" path="contrib/samples"/> <classpathentry kind="src" path="contrib/src/java/org/jdom2/contrib/ids/doc-files"/> <classpathentry kind="src" path="contrib/src/java/org/jdom2/contrib/input/scanner/doc-files"/> <classpathentry kind="lib" path="${junit.jar}"/> <classpathentry kind="lib" path="${parser.jar}"/> <classpathentry kind="lib" path="${xmlapi.jar}"/> <classpathentry kind="lib" path="${jaxen.jar}"/> <classpathentry kind="lib" path="${isorelax.jar}"/> <classpathentry kind="lib" path="${xalanser.jar}"/> <classpathentry kind="lib" path="${xalan.jar}"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="output" path="ebuild"/> </classpath> ]]> </echo> </target> <!-- =================================================================== --> <!-- Maven targets --> <!-- =================================================================== --> <target name="maven.clean"> <delete dir="${mavendir}" includes="**/*" failonerror="false"/> </target> <target name="maven" depends="maven.clean, package" description="Prepares Maven bundle to load on to Sonatype Nexus for Maven-Central"> <mkdir dir="${mavendir}" /> <mkdir dir="${mavendir}/core" /> <mkdir dir="${mavendir}/test" /> <mkdir dir="${mavendir}/contrib" /> <property name="mavenartifact" value="jdom2" /> <property name="mavenbase" value="${mavenartifact}-${version}" /> <!-- copy the build jar --> <copy tofile="${mavendir}/core/${mavenbase}.jar" file="${package}/${jarbase}.jar"/> <copy tofile="${mavendir}/core/${mavenbase}-javadoc.jar" file="${package}/${jarbase}-javadoc.jar"/> <copy tofile="${mavendir}/core/${mavenbase}-sources.jar" file="${package}/${jarbase}-sources.jar"/> <!-- load the license in to the ${license} property --> <loadfile property="license" srcfile="LICENSE.txt" /> <!-- copy/rename the pom template --> <copy filtering="true" file="maven/maven.pom" tofile="${mavendir}/core/${mavenbase}.pom"> <filterset> <filter token="artifactID" value="${mavenartifact}"/> <filter token="version" value="${version}" /> <filter token="jdk" value="${compile.target}" /> <filter token="license" value="${license}" /> </filterset> </copy> <exec dir="${mavendir}/core" executable="${gpg}"> <arg value="-abv"/> <arg value="${mavenbase}.pom"/> </exec> <exec dir="${mavendir}/core" executable="${gpg}"> <arg value="-abv"/> <arg value="${mavenbase}.jar"/> </exec> <exec dir="${mavendir}/core" executable="${gpg}"> <arg value="-abv"/> <arg value="${mavenbase}-sources.jar"/> </exec> <exec dir="${mavendir}/core" executable="${gpg}"> <arg value="-abv"/> <arg value="${mavenbase}-javadoc.jar"/> </exec> <jar destfile="${mavendir}/${mavenbase}-maven-bundle.jar" basedir="${mavendir}/core" includes="${mavenbase}*" excludes="*maven-bundle*" /> </target> </project> <!-- End of file -->