Java/Ant/Build
build.properties and build.xml
<source lang="java">
- 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
- 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.
- This file is used by build.xml
- Global defaults
name= Anakia project= anakia version= 1.0 final.name= ${project}-${version} root.package= org.apache.anakia
- compile switches
debug= on optimize= on deprecation= off ant.build.dir= build build.dir= ${app.dir}/bin
- The source tree runs through a filter copy task to
- allow substitution of version, date etc. and will
- end up in build.src
build.lib= ${build.dir}/lib build.test.lib= ${build.dir}/test-lib build.dest= ${build.dir}/classes build.test.dest= ${build.dir}/test-classes build.javadoc= ${build.dir}/apidocs build.test= ${build.dir}/test build.docs= ${build.dir}/docs
- Various local pathes in the distribution
src.java.dir= ${app.dir}/src/java test.java.dir= ${app.dir}/src/test test.dir= ${app.dir}/test example.dir= ${app.dir}/examples xdocs.dir= ${app.dir}/xdocs
- Running the tests
test.haltonerror= true test.haltonfailure= true
- Building the distribution
dist.root= ${build.dir}/dist dist.dir= ${dist.root}/${final.name}
- Set to Sun Javadocs
javadocs.ref.jsdk= http://java.sun.ru/j2se/1.4.2/docs/api/
- for the javadoc
javadoc.packagenames = ${root.package}.*
- attributes for the jar manifest
mf.package = ${root.package} mf.extension.name = ${project} mf.specification.title = Anakia is a XML-based text processor mf.specification.vendor = Apache Software Foundation mf.implementation.title = ${mf.package} mf.implementation.vendor.id = org.apache mf.implementation.vendor = Apache Software Foundation mf.implementation.version = ${version}
- #######################################################################
- Downloading jars from ibiblio repository
- #######################################################################
- The default behaviour is to download dependency jars only when
- they are not already present.
- Set skip.jar.loading to true to never download any dependency jar,
- or force.jar.loading to true to always download all dependency jars.
skip.jar.loading= false force.jar.loading= false
- Settings for the proxy to use for download. Change this if you must
- use a proxy from your host. If the proxy.host property is unset, no
- proxy is used.
proxy.host= proxy.port= 80
- We download directly from the ibiblio maven repository
repo.url= http://www.ibiblio.org/maven
- Jars to be downloaded
jar.antlr.version= 2.7.5 jar.rumons-collections.version= 3.1 jar.rumons-lang.version= 2.1 jar.jdom.version= 1.0 jar.werken-xpath.version= 0.9.4 jar.junit.version= 3.8.1 jar.velocity.version= 1.5
<?xml version="1.0" encoding="ISO-8859-1"?>
<project name="Anakia" default="world" basedir="..">
<path id="basedir-os"> <pathelement location="${basedir}" /> </path> <pathconvert property="app.dir" refid="basedir-os" targetos="unix"/> <property file="${user.home}/.ant.properties" /> <property file="${user.home}/build.properties" /> <property file=".ant.properties" /> <property file="build/build.properties" />
<property name="test.runner" value="junit.textui.TestRunner"/> <target name="world" depends="jar,test,javadocs,docs,env" description="Build the project jar and documentation"/> <target name="env" description="Prints build parameters"> <echo> Global settings: java.home = ${java.home} user.home = ${user.home} java.class.path = ${java.class.path} Project settings: Version: ${version} Debug: ${debug} Optimize: ${optimize} Deprecation: ${deprecation} Target settings (relative to build tree root): Classes: ${build.dest} API Docs: ${build.javadoc} Docs: ${build.docs} </echo> </target> <target name="prepare" depends="basic-prepare"/>
<target name="basic-prepare"> <mkdir dir="${build.dir}"/> <mkdir dir="${build.dest}"/> <mkdir dir="${build.test.dest}"/> </target> <target name="build-prepare" depends="basic-prepare"> <ant antfile="${ant.build.dir}/download.xml" target="build-download" /> <path id="build.classpath"> <fileset dir="${build.lib}"> <include name="**/*.jar"/> </fileset> </path> <path id="test.classpath"> <fileset dir="${build.test.lib}"> <include name="**/*.jar"/> </fileset> <fileset dir="${build.lib}"> <include name="**/*.jar"/> </fileset> <pathelement location="${build.dest}" /> <pathelement location="${build.test.dest}" /> </path> <path id="run.classpath"> <path refid="build.classpath"/> <pathelement location="${build.dir}/${final.name}.jar"/> </path> </target> <target name="compile" depends="compile-src,compile-test"/> <target name="compile-src" depends="build-prepare" description="Compiles the source"> <javac srcdir="${src.java.dir}" destdir="${build.dest}" encoding="UTF-8" debug="${debug}" deprecation="${deprecation}" optimize="${optimize}" classpathref="build.classpath"/> <copy todir="${build.dest}" filtering="yes"> <fileset dir="${src.java.dir}"> <include name="**/*.properties"/> </fileset> </copy> </target> <target name="compile-test" depends="build-prepare,compile-src" description="Compiles the test classes"> <javac srcdir="${test.java.dir}" destdir="${build.test.dest}" encoding="UTF-8" debug="${debug}" deprecation="${deprecation}" optimize="${optimize}"> <classpath> <path refid="build.classpath"/> <path refid="test.classpath" /> <pathelement location="${build.dest}"/> </classpath> </javac> <copy todir="${build.test.dest}" filtering="yes"> <fileset dir="${test.java.dir}"> <include name="**/*.properties"/> </fileset> </copy> </target>
<target name="jar" depends="compile-src" description="Builds the Jar file"> <property name="jarname" value="${final.name}" /> <jar jarfile="${build.dir}/${jarname}.jar"> <metainf dir="${app.dir}"> <include name="LICENSE"/> <include name="NOTICE"/> </metainf> <fileset dir="${build.dest}"/> <manifest> <attribute name="Created-By" value="Apache Ant"/> <attribute name="Build-Jdk" value="${java.version}"/> <attribute name="Package" value="${mf.package}"/> <attribute name="Extension-Name" value="${mf.extension.name}"/> <attribute name="Specification-Title" value="${mf.specification.title}" /> <attribute name="Specification-Vendor" value="${mf.specification.vendor}"/> <attribute name="Implementation-Title" value="${mf.implementation.title}"/> <attribute name="Implementation-Vendor-Id" value="${mf.implementation.vendor.id}"/> <attribute name="Implementation-Vendor" value="${mf.implementation.vendor}"/> <attribute name="Implementation-Version" value="${mf.implementation.version}"/> </manifest> </jar> <checksum file="${build.dir}/${jarname}.jar" algorithm="md5" property="checksum.jar.md5"/> <checksum file="${build.dir}/${jarname}.jar" algorithm="sha1" property="checksum.jar.sha1"/> <echo message="${checksum.jar.md5} *${jarname}.jar" file="${build.dir}/${jarname}.jar.md5" /> <echo message="${checksum.jar.sha1} *${jarname}.jar" file="${build.dir}/${jarname}.jar.sha1" /> </target> <target name="jar-src" depends="prepare" description="Builds the Source Jar File"> <jar jarfile="${build.dir}/${final.name}-src.jar"> <metainf dir="${app.dir}"> <include name="LICENSE"/> <include name="NOTICE"/> </metainf> <fileset dir="${src.java.dir}"/> <manifest> <attribute name="Created-By" value="Apache Ant"/> <attribute name="Specification-Title" value="${mf.specification.title}" /> <attribute name="Specification-Vendor" value="${mf.specification.vendor}"/> <attribute name="Implementation-Title" value="${mf.implementation.title}"/> <attribute name="Implementation-Vendor-Id" value="${mf.implementation.vendor.id}"/> <attribute name="Implementation-Vendor" value="${mf.implementation.vendor}"/> <attribute name="Implementation-Version" value="${mf.implementation.version}"/> </manifest> </jar> <checksum file="${build.dir}/${final.name}-src.jar" algorithm="md5" property="checksum.jar-src.md5"/> <checksum file="${build.dir}/${final.name}-src.jar" algorithm="sha1" property="checksum.jar-src.sha1"/> <echo message="${checksum.jar-src.md5} *${final.name}-src.jar" file="${build.dir}/${final.name}-src.jar.md5" /> <echo message="${checksum.jar-src.sha1} *${final.name}-src.jar" file="${build.dir}/${final.name}-src.jar.sha1" /> </target> <target name="javadocs" depends="build-prepare" description="Creates the Javadoc API documentation"> <mkdir dir="${build.javadoc}"/> <javadoc sourcepath="${src.java.dir}" packagenames="${javadoc.packagenames}" destdir="${build.javadoc}" author="true" private="false" version="true" use="true" windowtitle="${name} ${version} API" doctitle="${name} ${version} API" encoding="UTF-8" docencoding="UTF-8" bottom="Copyright © 2000-${build.year} <a href="http://www.apache.org/%22>Apache Software Foundation</a>. All Rights Reserved." classpathref="build.classpath"> <link href="${javadocs.ref.jsdk}"/> <link href="http://www.jdom.org/docs/apidocs"/> <link href="http://logging.apache.org/log4j/docs/api"/> <link href="http://excalibur.apache.org/apidocs"/> <link href="http://tomcat.apache.org/tomcat-4.1-doc/servletapi"/> <link href="http://jakarta.apache.org/oro/api"/> <link href="http://jakarta.apache.org/commons/lang/api-release"/> <link href="http://jakarta.apache.org/commons/collections/api-release"/> </javadoc> </target> <target name="javadocs-clean"> <delete dir="${build.javadoc}" quiet="true"/> </target> <target name="build-package-tree" depends="clean,jar,docs,javadocs">
<mkdir dir="${dist.dir}"/> <mkdir dir="${dist.dir}/src/java"/> <copy todir="${dist.dir}/src/java/"> <fileset dir="${src.java.dir}" /> </copy> <copy todir="${dist.dir}/src/test/"> <fileset dir="${test.java.dir}" /> </copy> <copy todir="${dist.dir}/lib"> <fileset dir="${build.lib}" /> </copy> <copy todir="${dist.dir}/lib/test"> <fileset dir="${build.test.lib}" /> </copy> <copy todir="${dist.dir}/build"> <fileset dir="${app.dir}/build"> <include name="**"/> <exclude name="velocity.log"/> </fileset> </copy> <copy todir="${dist.dir}/docs"> <fileset dir="${build.docs}"> <include name="**"/> <exclude name="docs/api/**"/> </fileset> </copy> <copy todir="${dist.dir}/docs/api"> <fileset dir="${build.javadoc}"> <include name="**"/> </fileset> </copy> <copy todir="${dist.dir}/test"> <fileset dir="${app.dir}/test"> <include name="**"/> </fileset> </copy> <copy todir="${dist.dir}/xdocs"> <fileset dir="${xdocs.dir}"> <include name="**"/> </fileset> </copy> <copy todir="${dist.dir}"> <fileset dir="${app.dir}"> <include name="LICENSE" /> <include name="NOTICE" /> <include name="README.txt" /> <include name="pom.xml" /> </fileset> </copy> <copy file="${build.dir}/${final.name}.jar" tofile="${dist.dir}/${final.name}.jar" /> </target> <target name="package-zip" depends="build-package-tree"> <fixcrlf srcdir="${dist.dir}" eol="crlf" eof="asis" encoding="ISO-8859-1"> <include name="**/*.html" /> <include name="**/*.java" /> <include name="**/*.properties" /> <include name="**/*.txt" /> <include name="**/*.xml" /> </fixcrlf> <delete file="${build.dir}/${final.name}.zip" quiet="true"/> <zip zipfile="${build.dir}/${final.name}.zip" basedir="${dist.root}" includes="**/${final.name}/**"/> <checksum file="${build.dir}/${final.name}.zip" algorithm="md5" property="checksum.zip.md5"/> <checksum file="${build.dir}/${final.name}.zip" algorithm="sha1" property="checksum.zip.sha1"/> <echo message="${checksum.zip.md5} *${final.name}.zip" file="${build.dir}/${final.name}.zip.md5" /> <echo message="${checksum.zip.sha1} *${final.name}.zip" file="${build.dir}/${final.name}.zip.sha1" /> </target> <target name="package-tgz" depends="build-package-tree"> <fixcrlf srcdir="${dist.dir}" eol="lf" eof="remove" encoding="ISO-8859-1"> <include name="**/*.html" /> <include name="**/*.java" /> <include name="**/*.properties" /> <include name="**/*.txt" /> <include name="**/*.xml" /> </fixcrlf> <delete file="${build.dir}/${final.name}.tar.gz" quiet="true"/> <tar tarfile="${build.dir}/${final.name}.tar.gz" basedir="${dist.root}" includes="**/${final.name}/**" longfile="gnu" compression="gzip" /> <checksum file="${build.dir}/${final.name}.tar.gz" algorithm="md5" property="checksum.tgz.md5"/> <checksum file="${build.dir}/${final.name}.tar.gz" algorithm="sha1" property="checksum.tgz.sha1"/> <echo message="${checksum.tgz.md5} *${final.name}.tar.gz" file="${build.dir}/${final.name}.tar.gz.md5" /> <echo message="${checksum.tgz.sha1} *${final.name}.tar.gz" file="${build.dir}/${final.name}.tar.gz.sha1" /> </target>
<target name="package" depends="package-zip,package-tgz" description="Generates the distribution files"> </target> <target name="clean" description="Cleans all generated files except downloaded libs"> <delete includeEmptyDirs="true" quiet="true"> <fileset dir="${build.dir}" defaultexcludes="no"> <exclude name="lib/**" /> <exclude name="test-lib/**" /> </fileset> <fileset dir="${ant.build.dir}" defaultexcludes="no"> <include name="velocity.log" /> </fileset> </delete> </target> <target name="real-clean" description="Cleans all generated files"> <delete includeEmptyDirs="true" quiet="true" dir="${build.dir}" /> </target> <target name="docs" depends="build-prepare,jar" description="Generates the HTML documentation"> <taskdef name="anakia" classname="org.apache.anakia.AnakiaTask" classpathref="run.classpath"/> <echo> ####################################################### # # Now using Anakia to transform the XML documentation # to HTML. ####################################################### </echo> <anakia basedir="${xdocs.dir}/docs" destdir="${build.docs}" extension=".html" style="site.vsl" projectFile="../stylesheets/project.xml" includes="**/*.xml" lastModifiedCheck="true" templatePath="${xdocs.dir}/stylesheets"> </anakia> <copy todir="${build.docs}/images" filtering="no"> <fileset dir="${xdocs.dir}/images"> <include name="**/*.gif"/> <include name="**/*.jpeg"/> <include name="**/*.jpg"/> <include name="**/*.png"/> </fileset> </copy> <copy todir="${build.docs}" filtering="no"> <fileset dir="${xdocs.dir}"> <include name="**/*.css"/> <include name="**/.htaccess"/> </fileset> </copy> </target>
<target name="docs-clean"> <delete dir="${build.docs}" quiet="true"/> </target>
<target name="test-clean"> <delete dir="${build.test.dest}" quiet="true"/> <delete dir="${build.test}" quiet="true"/> <delete dir="${build.test.reports}" quiet="true"/> </target>
<target name="test" depends="build-prepare,compile-test,test-anakia"/>
<target name="test-anakia"> <echo message="Running Anakia tests..."/> <taskdef name="anakia" classname="org.apache.anakia.AnakiaTask" classpathref="test.classpath"/> <anakia basedir="${test.dir}/anakia/xdocs" destdir="${build.test}/anakia" extension=".html" style="./site_contexts.vsl" projectFile="./stylesheets/project.xml" excludes="**/stylesheets/**" includes="**/*.xml" templatePath="${test.dir}/anakia/xdocs/stylesheets" lastModifiedCheck="false"> </anakia> <anakia basedir="${test.dir}/anakia/xdocs" destdir="${build.test}/anakia" extension=".context.html" style="./site_contexts.vsl" projectFile="./stylesheets/project.xml" excludes="**/stylesheets/**" includes="**/*.xml" templatePath="${test.dir}/anakia/xdocs/stylesheets" lastModifiedCheck="false"> <context name="customContext" file="./stylesheets/customContext.xml"/> </anakia> <java classname="${test.runner}" fork="yes" dir="${app.dir}" failonerror="${test.haltonerror}" classpathref="test.classpath"> <arg value="org.apache.anakia.AnakiaTestCase"/> </java> </target>
</project>
</source>
Build the JSTL from source
<source lang="java">
<?xml version="1.0"?> <project name="Example Application Build" default="build-both" basedir=".">
<property file="build.properties"/> <property name="cvsroot" value=":pserver:anoncvs@cvs.apache.org:/home/cvspublic" /> <property name="mysql.cvsroot" value=":pserver:anonymous@cvs.sourceforge.net:/cvsroot/mmmysql" /> <path id="build.classpath"> <pathelement location="${servlet24.jar}"/> <pathelement location="${jsp20.jar}"/> <pathelement location="${mysql.jar}"/> <pathelement path="${appName.jar}"/> </path>
<target name="dir" description="Create the working directories"> <echo message="Creating the working directories"/> <mkdir dir="${build.stand-alone.root}"/> <mkdir dir="${build.web.classes}"/> <mkdir dir="${dist}"/> <mkdir dir="${lib}"/> </target>
<target name="checkout-jstl" depends="dir" description="Update or check out required sources from CVS for the JSTL"> <echo message="Checking out the required JSTL sources from CVS"/> <cvs cvsroot="${cvsroot}" quiet="true" command="checkout -P ${jstl.build}" dest="${build}" compression="true" /> </target> <target name="checkout-mysql-connector" depends="dir" description="Update or check out required sources from CVS for the MySQL connector"> <echo message="Checking out the required sources from CVS for the MySQL connector" /> <cvs cvsroot="${mysql.cvsroot}" quiet="true" command="checkout" package="${mysql.build}" dest="${build}" compression="true" /> </target> <target name="build-jstl" depends="checkout-jstl" description="Build the JSTL from source"> <echo message="Building the JSTL from source"/> <ant antfile="build.xml" dir="${build}/${jstl.build}"/> <copy todir="${lib}"> <fileset dir="${build}/${jstl.build}/${build}/lib"> <include name="*.jar"/> </fileset> </copy> </target> <target name="build-mysql-connector" depends="checkout-mysql-connector" description="Build the MySQL connector from source"> <echo message="Building the MySQL connector from source"/> <mkdir dir="${build}/dist-mysql-jdbc"/> <ant antfile="build.xml" dir="${build}/${mysql.build}"/> <copy tofile="${mysql.jar}"> <fileset dir="${build}/build-mysql-jdbc"> <include name="mysql-connector*/*.jar"/> </fileset> </copy> </target>
<target name="compile-stand-alone" depends="dir" description="Compile stand-alone application"> <echo message="Compiling the stand-alone application"/> <javac srcdir="${src.shared.java}" destdir="${build.stand-alone.root}"/> <javac srcdir="${src.stand-alone.java}" destdir="${build.stand-alone.root}"/> </target>
<target name="stand-alone-complete" depends="build-mysql-connector, package-stand-alone" description="Compile stand-alone application, using CVS version of the MySQL connector"> <echo message="Compiling stand-alone application, using CVS versions of the MySQL connector"/> </target> <target name="package-stand-alone" depends="compile-stand-alone" description="Package the stand-alone application"> <echo message="Creating the stand-alone JAR file"/> <copy file="${database.properties}" todir="${build.stand-alone.root}"/> <jar destfile="${appName.jar}" basedir="${build.stand-alone.root}"/> </target> <target name="compile-web" depends="dir" description="Compile web application"> <echo message="Compiling the web application"/> <javac destdir="${build.web.classes}"> <src path="${src.shared.java}"/> </javac> <javac srcdir="${src.web.java}" destdir="${build.web.classes}"> <classpath refid="build.classpath"/> </javac> </target>
<target name="web-complete" depends="build-mysql-connector, build-jstl, package-web" description="Compile web application, using CVS versions of the MySQL connector and the JSTL"> <echo message="Compiling web application, using CVS versions of the MySQL connector and the JSTL"/> </target> <target name="copy-web" depends="compile-web" description="Copy the web files"> <echo message="Copying the web pages and configuration files"/> <copy todir="${build.web.root}"> <fileset dir="${src.web.pages}"/> </copy> <copy todir="${build.web.tags}"> <fileset dir="${src.web.tags}"/> </copy> <copy todir="${build.web.web-inf}"> <fileset dir="${src.web.conf}"> <include name="*.tld"/> </fileset> </copy> <copy todir="${build.web.lib}"> <fileset dir="${lib}"/> </copy> <copy file="${database.properties}" todir="${build.web.classes}"/> </target> <target name="package-web" depends="copy-web" description="Build the WAR"> <echo message="Building the WAR file"/> <war destfile="${appName.war}" basedir="${build.web.root}" webxml="${src.web.conf}/web.xml"/> </target>
<target name="build-both" depends="package-stand-alone, package-web" description="Compile both applications, without CVS versions of the MySQL connector and the JSTL"> <echo message="Compiled both applications, without CVS versions of the MySQL connector and the JSTL"/> </target> <target name="build-all" depends="stand-alone-complete, web-complete" description="Compile both applications, using CVS versions of the MySQL connector and the JSTL"> <echo message="Compiled both applications, using CVS versions of the MySQL connector and the JSTL"/> </target>
<target name="download-servlet-jar" depends="dir" description="Download the servlet JAR"> <echo message="Downloading the servlet JAR"/> <get src="http://www.ibiblio.org/maven/servletapi/jars/servletapi-2.4.jar" dest="${servlet24.jar}" verbose="true"/> </target> <target name="download-jsp-jar" depends="dir" description="Download the JSP JAR"> <echo message="Downloading the JSP JAR"/> <get src="http://www.ibiblio.org/maven/jspapi/jars/jsp-api-2.0.jar" dest="${jsp20.jar}" verbose="true"/> </target> <target name="clean" description="Clean up the working directories"> <echo message="Cleaning up"/> <delete dir="${build}"/> </target>
</project>
</source>