| <!--=========================================================================== |
| Copyright 2006-2010 Daniel W. Dyer |
| |
| Licensed 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 |
| |
| http://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="watchmaker" |
| xmlns:uncommons="antlib:org.uncommons.antlib" |
| default="dist" |
| basedir="."> |
| <description>Ant build file for the Watchmaker framework.</description> |
| |
| |
| <!-- ================================================================== |
| GLOBAL BUILD PROPERTIES |
| =================================================================== --> |
| |
| <!-- Project-global locations. --> |
| <property name="conf.dir" value="etc" /> |
| <property name="lib.dir" value="lib" /> |
| <property name="lib.compiletime" value="${lib.dir}/compiletime" /> |
| <property name="lib.runtime" value="${lib.dir}/runtime" /> |
| <property name="dist.dir" value="dist" /> |
| <property name="docs.dir" value="docs" /> |
| <property name="checkstyle-results.dir" value="${docs.dir}/checkstyle" /> |
| <property name="release.dir" value="release" /> |
| <!-- The "website" directory is a symlink to a copy of the Git repository |
| at http://github.com/dwdyer/watchmaker-website. --> |
| <property name="web.dir" value="website" /> |
| <property name="temp.dir" value="temp" /> |
| |
| <!-- Per-module locations. --> |
| <property name="src.dir" value="src" /> |
| <property name="java.dir" value="${src.dir}/java" /> |
| <property name="build.dir" value="build"/> |
| |
| |
| <!-- Classpath for compilation and tests. --> |
| <path id="tool.path"> |
| <fileset dir="${lib.dir}" includes="**/*.jar" /> |
| </path> |
| |
| <taskdef uri="antlib:org.uncommons.antlib" |
| resource="org/uncommons/antlib/antlib.xml" |
| classpathref="tool.path"/> |
| |
| |
| <property name="version" value="0.7.2"/> |
| <property name="artifact.identifier" value="watchmaker-framework-${version}"/> |
| |
| <!-- This is the minimum coverage percentage (for both lines and |
| branches) that will be tolerated. This is used to prevent |
| regressions in coverage. The threshold will be raised as |
| test coverage improves. --> |
| <property name="minimum.coverage" value="80" /> |
| |
| |
| <!-- ================================================================== |
| TARGETS FOR BUILDING THE SOFTWARE |
| =================================================================== --> |
| |
| <!-- Builds everything from scratch. --> |
| <target name="all" |
| depends="clean, dist, test, docs" |
| description="Builds everything, excluding docs, from scratch."/> |
| |
| |
| <!-- Deletes all directories and files created by the build process. --> |
| <target name="clean" |
| description="Remove all files created by the build process." > |
| <delete dir="${docs.dir}" /> |
| <delete dir="${dist.dir}" /> |
| <delete dir="${release.dir}" /> |
| <delete dir="${temp.dir}" /> |
| <uncommons:clean module="examples" /> |
| <uncommons:clean module="framework" /> |
| <uncommons:clean module="swing" /> |
| <uncommons:clean module="book" /> |
| </target> |
| |
| |
| <!-- Builds the core framework JAR. --> |
| <target name="framework" |
| description="Build the framework module."> |
| <uncommons:compile module="framework" /> |
| <uncommons:jar module="framework" jarfile="${artifact.identifier}.jar" /> |
| </target> |
| |
| |
| <!-- Builds the GUI module. --> |
| <target name="swing" |
| depends="framework" |
| description="Build the GUI module."> |
| <uncommons:compile module="swing" /> |
| <uncommons:jar module="swing" jarfile="watchmaker-swing-${version}.jar" /> |
| </target> |
| |
| |
| <!-- Builds the examples JAR, which depends on each of the other modules. --> |
| <target name="examples" |
| depends="framework, swing" |
| description="Build the examples."> |
| <uncommons:compile module="examples" /> |
| <uncommons:jar module="examples" |
| jarfile="watchmaker-examples-${version}.jar" |
| classpath="${artifact.identifier}.jar lib/uncommons-maths-1.2.2.jar lib/google-collect-1.0.jar watchmaker-swing-${version}.jar lib/jfreechart-1.0.13.jar lib/jcommon-1.0.16.jar" |
| mainclass="org.uncommons.watchmaker.examples.Launcher" /> |
| </target> |
| |
| |
| <!-- Copy all necessary files to distribution directory. --> |
| <target name="dist" |
| depends="framework, swing, examples" |
| description="Generate the project distribution." > |
| <uncommons:dist /> |
| <mkdir dir="${dist.dir}/src" /> |
| <copy todir="${dist.dir}/src" flatten="true"> |
| <fileset dir="." includes="**/${build.dir}/*-src.jar"/> |
| </copy> |
| </target> |
| |
| |
| <!-- Build source JAR files for inclusion in the release. --> |
| <target name="source" description="Build source JARs."> |
| <uncommons:source module="framework" jarfile="${artifact.identifier}-src.jar" /> |
| <uncommons:source module="swing" jarfile="watchmaker-swing-${version}-src.jar" /> |
| </target> |
| |
| |
| <!-- Create the release artifacts. --> |
| <target name="release" |
| depends="clean, source, dist, test, checkstyle, docs" |
| description="Creates the release archives."> |
| <uncommons:release name="${artifact.identifier}"> |
| <additionalcontents> |
| <tarfileset dir="examples/${java.dir}/main" |
| prefix="${artifact.identifier}/examples/src" |
| includes="**/*" /> |
| </additionalcontents> |
| </uncommons:release> |
| </target> |
| |
| |
| <target name="release-maven" |
| depends="clean, dist" |
| description="Deploys the software to the Java.net Maven repository."> |
| <uncommons:maven-deploy module="framework" |
| version="${version}" |
| username="${maven.user}" |
| password="${maven.password}"/> |
| <uncommons:maven-deploy module="swing" |
| version="${version}" |
| username="${maven.user}" |
| password="${maven.password}"/> |
| </target> |
| |
| |
| |
| <!-- ================================================================== |
| TARGETS FOR GENERATING TEST REPORTS & DOCUMENTATION |
| =================================================================== --> |
| |
| <!-- Runs unit tests for all modules. --> |
| <target name="test" |
| depends="dist" |
| description="Run the unit test suite."> |
| <!-- Don't run FEST tests in a headless environment (they will fail) --> |
| <condition property="tests.file" value="testng-headless.xml" else="testng.xml"> |
| <isset property="headless" /> |
| </condition> |
| <uncommons:test suites="${conf.dir}/${tests.file}" |
| headless="${headless}" |
| title="Watchmaker Framework Unit Test Report" |
| mincoverage="${minimum.coverage}" /> |
| </target> |
| |
| |
| <target name="checkstyle" |
| depends="dist" |
| description="Check that coding standard are adhered to."> |
| <taskdef resource="checkstyletask.properties" classpathref="tool.path"/> |
| <mkdir dir="${checkstyle-results.dir}" /> |
| |
| <!-- Compiled classes must be available on the classpath to work-around this |
| bug (http://jira.codehaus.org/browse/MPCHECKSTYLE-20). That is why this |
| target depends on the 'dist' target. --> |
| <path id="checkstyle.path"> |
| <fileset dir="${dist.dir}" includes="**/*.jar" /> |
| </path> |
| |
| <checkstyle config="${conf.dir}/checks.xml" |
| failonviolation="false" |
| classpathref="checkstyle.path"> |
| <fileset dir="." defaultexcludes="yes"> |
| <include name="**/${java.dir}/main/org/uncommons/**/*.java"/> |
| </fileset> |
| <formatter type="xml" tofile="${checkstyle-results.dir}/checkstyle_report.xml"/> |
| </checkstyle> |
| <xslt in="${checkstyle-results.dir}/checkstyle_report.xml" |
| out="${checkstyle-results.dir}/checkstyle_report.html" |
| style="${conf.dir}/checkstyle-noframes-sorted.xsl" /> |
| </target> |
| |
| |
| <!-- Generates API documentation for all modules. --> |
| <target name="docs" |
| description="Generates Javadoc API documentation for all modules."> |
| <uncommons:javadoc title="Watchmaker Framework for Evolutionary Computation API" |
| version="${version}" |
| excludes="examples/**/*,framework/${java.dir}/main/org/uncommons/util/**/*"> |
| <additionalconfig> |
| <group title="Watchmaker Evolution Framework" packages="org.uncommons.watchmaker.framework:org.uncommons.watchmaker.framework.*"/> |
| <group title="Watchmaker Swing Classes" packages="org.uncommons.swing:org.uncommons.swing.*:org.uncommons.watchmaker.swing:org.uncommons.watchmaker.swing.*"/> |
| <link href="http://maths.uncommons.org/api/"/> |
| </additionalconfig> |
| </uncommons:javadoc> |
| </target> |
| |
| |
| <target name="book" description="Generates the PDF user guide."> |
| <mkdir dir="book/${build.dir}" /> |
| <uncommons:docbook classpathref="tool.path" |
| source="book/${src.dir}/xml/book.xml" |
| format="pdf" |
| outputDir="book/${build.dir}" > |
| <parameter name="paper.type" value="A4" /> |
| <parameter name="highlight.source" value="1" /> |
| <parameter name="img.src.path" value="./book/src/resources/" /> |
| </uncommons:docbook> |
| </target> |
| |
| |
| <!-- ================================================================== |
| TARGETS FOR UPDATING THE PROJECT WEBSITE |
| =================================================================== --> |
| |
| <target name="website-docs" |
| description="Re-builds the website Javadocs." |
| depends="dist"> |
| <!-- Delete all existing HTML files and then regenerate the docs over the top. --> |
| <delete> |
| <fileset dir="${web.dir}"> |
| <include name="api/**/*.html" /> |
| <include name="manual/**/*" /> |
| </fileset> |
| </delete> |
| |
| <!-- Refresh the API documentation tree for the Watchmaker Framework website. --> |
| <uncommons:javadoc dir="${web.dir}/api" |
| title="Watchmaker Framework for Evolutionary Computation API" |
| version="${version}" |
| excludes="examples/**/*,framework/${java.dir}/main/org/uncommons/util/**/*"> |
| <additionalconfig> |
| <group title="Watchmaker Evolution Framework" packages="org.uncommons.watchmaker.framework:org.uncommons.watchmaker.framework.*"/> |
| <group title="Watchmaker Swing Classes" packages="org.uncommons.swing:org.uncommons.swing.*:org.uncommons.watchmaker.swing:org.uncommons.watchmaker.swing.*"/> |
| <link href="http://maths.uncommons.org/api/"/> |
| </additionalconfig> |
| </uncommons:javadoc> |
| |
| <copy todir="${web.dir}" file="./CHANGELOG.txt"> |
| <filterset> |
| <filter token="VERSION" value="${version}"/> |
| </filterset> |
| </copy> |
| |
| <!-- Copy latest jars into website examples directory. --> |
| <copy todir="${web.dir}/examples"> |
| <fileset dir="${dist.dir}" includes="*.jar" /> |
| </copy> |
| <copy todir="${web.dir}/examples/lib"> |
| <fileset dir="${dist.dir}/${lib.dir}" includes="*.jar" /> |
| </copy> |
| |
| <!-- Generate user manual from DocBook source. --> |
| <uncommons:docbook classpathref="tool.path" |
| source="book/${src.dir}/xml/website.xml" |
| format="html" |
| chunked="true" |
| outputDir="${web.dir}/manual" > |
| <parameter name="highlight.source" value="1" /> |
| <parameter name="img.src.path" value="./" /> |
| <parameter name="html.stylesheet" value="docbook.css" /> |
| </uncommons:docbook> |
| <copy todir="${web.dir}/manual"> |
| <fileset dir="book/${src.dir}/resources" includes="**/*"/> |
| </copy> |
| </target> |
| |
| </project> |