| <?xml version="1.0"?> |
| <!-- |
| 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. |
| --> |
| <!-- |
| FORREST SITE BUILDER |
| |
| - The runtime part of Forrest |
| - Contains actions Forrest can peform on any Forrest-using project. |
| - This is typically called by forrest.bat or forrest |
| --> |
| <project default="site" basedir="." name="forrest"> |
| <property environment="env" /> |
| <property name="forrest.home" location="${env.FORREST_HOME}" /> |
| <property name="forrest.version" value="0.10-dev"/> |
| <property name="forrest.lib-dir" location="${forrest.home}/lib"/> |
| <property name="forrest.core.lib-dir" location="${forrest.lib-dir}/core"/> |
| <property name="forrest.endorsed.lib-dir" location="${forrest.lib-dir}/endorsed"/> |
| <property name="forrest.optional.lib-dir" location="${forrest.lib-dir}/optional"/> |
| <property name="forrest.ant.lib-dir" location="${forrest.home}/tools/ant/lib"/> |
| <property name="forrest.anttasks" location="${forrest.home}/tools/anttasks"/> |
| <property name="forrest.jetty.lib-dir" location="${forrest.home}/tools/jetty"/> |
| <property name="forrest.build.lib-dir" location="${forrest.home}/build"/> |
| <property name="forrest.core" location="${forrest.home}/main"/> |
| <property name="forrest.core.webapp" location="${forrest.core}/webapp"/> |
| <import file="targets/validate.xml"/> |
| <import file="targets/webapp.xml"/> |
| <import file="targets/site.xml"/> |
| <import file="targets/skins.xml"/> |
| <import file="targets/plugins.xml"/> |
| <import file="targets/context.xml"/> |
| <import file="targets/seed.xml"/> |
| <description> |
| *=======================================================* |
| | Forrest Site Builder | |
| | Apache Forrest ${forrest.version} | |
| | | |
| | Call this through the 'forrest' command | |
| *=======================================================* |
| </description> |
| <taskdef name="jing" classname="com.thaiopensource.relaxng.util.JingTask"> |
| <classpath> |
| <fileset dir="${forrest.core.lib-dir}" includes="jing*.jar" /> |
| </classpath> |
| </taskdef> |
| <taskdef resource="net/sf/antcontrib/antlib.xml"> |
| <classpath> |
| <fileset dir="${forrest.ant.lib-dir}" includes="ant-contrib-*.jar" /> |
| </classpath> |
| </taskdef> |
| <!-- ***************************************************************** --> |
| <!-- ***************************************************************** --> |
| <!-- ** ** --> |
| <!-- ** ** --> |
| <!-- ** COMMON SETTINGS ** --> |
| <!-- ** ** --> |
| <!-- ** ** --> |
| <!-- ***************************************************************** --> |
| <!-- ***************************************************************** --> |
| <!-- =============================================================== |
| Loads user defined settings for local deployment. |
| Steps back to defaults when they are not set. |
| Echo's the settings if requested. |
| =============================================================== --> |
| <target name="init-props"> |
| <!-- setting defaults for parameters --> |
| <!-- people should use -D switch, or <ant><property>s to override these --> |
| <property name="project.home" location="." /> |
| <property file="${project.home}/forrest.properties" /> |
| <property file="${user.home}/forrest.properties" /> |
| <property file="${global.home}/forrest.properties" /> |
| <property file="${forrest.core.webapp}/default-forrest.properties" /> |
| <!-- people should use forrest.properties to override following defaults --> |
| <property name="build.plugins-dir" value="build/plugins"/> |
| <property name="forrest.skins-dir" location="${forrest.core.webapp}/skins"/> |
| <property name="forrest.plugins-dir" location="${forrest.home}/${build.plugins-dir}"/> |
| <!-- If the user wants to build i18n in diferent locations this is one way to implemented it--> |
| <if> |
| <equals arg1="${project.i18n}" arg2="true"/> |
| <then> |
| <property name="project.site-dir" location="${project.build-dir}/${project.site}/${user.language}" /> |
| </then> |
| <else> |
| <property name="project.site-dir" location="${project.build-dir}/${project.site}" /> |
| </else> |
| </if> |
| <property name="project.war" location="${project.build-dir}/${project.name}.war" /> |
| <property name="project.webapp" location="${project.build-dir}/webapp" /> |
| <property name="project.cocoon-work-dir" location="${project.temp-dir}/cocoon-work" /> |
| <property name="project.brokenlinkfile" location="${project.temp-dir}/brokenlinks.xml"/> |
| <property name="project.configfile" value="${forrest.core.webapp}/WEB-INF/cli.xconf" /> |
| <property name="project.logkitfile" value="${forrest.core.webapp}/WEB-INF/logkit.xconf" /> |
| <property name="project.logger" value="debug" /> |
| <property name="status" location="${project.home}/${project.status}" /> |
| <!-- FIXME: rename project.content-dir to project.documentation-dir --> |
| <property name="content-dir" location="${project.home}/${project.content-dir}" /> |
| <property name="raw-content-dir" location="${project.home}/${project.content-dir}/content" /> |
| <property name="sitemap-dir" location="${project.home}/${project.sitemap-dir}" /> |
| <property name="xdocs-dir" location="${project.home}/${project.xdocs-dir}" /> |
| <property name="catalog" location="${project.home}/${project.catalog}" /> |
| <property name="skins-dir" location="${project.home}/${project.skins-dir}" /> |
| <property name="skinconf" location="${project.home}/${project.skinconf}" /> |
| <property name="stylesheets-dir" location="${project.home}/${project.stylesheets-dir}" /> |
| <property name="conf-dir" location="${project.home}/${project.conf-dir}" /> |
| <property name="lib-dir" location="${project.home}/${project.lib-dir}" /> |
| <property name="classes-dir" location="${project.home}/${project.classes-dir}" /> |
| <property name="translations-dir" location="${project.home}/${project.translations-dir}" /> |
| <!-- checks for presence of tools.jar --> |
| <property name="tools.jar" location="${java.home}/../lib/tools.jar"/> |
| <available file="${tools.jar}" property="tools.jar.present"/> |
| <!-- Define filters for project.* properties --> |
| <mkdir dir="${project.temp-dir}"/> |
| <property name="projfilters" value="${project.temp-dir}/projfilters.properties"/> |
| <echoproperties prefix="project" destfile="${projfilters}"/> |
| <filter filtersfile="${projfilters}"/> |
| <filter token="forrest.home" value="${forrest.home}"/> |
| <filter token="project.home" value="${project.home}"/> |
| <available file="${content-dir}/jettyconf.xml" |
| property="custom_jetty_config"/> |
| <!-- |
| Skin aliasing for backwards compatability |
| 0.5 => 0.6+ |
| krysalis-site => ... warn about future removal |
| crust => old development, closest is the old krysalis-site |
| forrest-site => ... warn about future removal |
| forrest-css => pelt |
| avalon-tigris => tigris |
| tigris-style => tigris |
| |
| This must be kept in sync with ForrestConfModule.java/aliasSkinProperties() |
| --> |
| <if> |
| <equals arg1="${project.skin}" arg2="forrest-css"/> |
| <then> |
| <property name="project.new-skin-name" value="pelt"/> |
| </then> |
| <elseif> |
| <equals arg1="${project.skin}" arg2="avalon-tigris"/> |
| <then> |
| <property name="project.new-skin-name" value="tigris"/> |
| </then> |
| </elseif> |
| <elseif> |
| <equals arg1="${project.skin}" arg2="tigris-style"/> |
| <then> |
| <property name="project.new-skin-name" value="tigris"/> |
| </then> |
| </elseif> |
| <elseif> |
| <equals arg1="${project.skin}" arg2="crust"/> |
| <then> |
| <property name="project.new-skin-name" value="krysalis-site"/> |
| </then> |
| </elseif> |
| <!-- temporarily bring back krysalis-site |
| <elseif> |
| <equals arg1="${project.skin}" arg2="krysalis-site"/> |
| <then> |
| <property name="project.new-skin-name" value="pelt"/> |
| </then> |
| </elseif> |
| --> |
| <!-- temporarily bring back forrest-site |
| <elseif> |
| <equals arg1="${project.skin}" arg2="forrest-site"/> |
| <then> |
| <property name="project.new-skin-name" value="crust"/> |
| </then> |
| </elseif> |
| --> |
| </if> |
| <if> |
| <isset property="project.new-skin-name"/> |
| <then> |
| <echo level="warning"> |
| -- Warning -- |
| skin "${project.skin}" no longer exists, the skin named |
| "${project.new-skin-name}" will be automatically used instead. |
| |
| If this is the first time you see this, it means that you have |
| to regenerate and publish the *whole* site, so that all pages |
| are rendered with the "${project.new-skin-name}" skin. |
| |
| If you fail to do so it is almost certain that the site will not |
| look right. |
| |
| Please update forrest.properties to choose a new skin |
| and so remove this warning. |
| </echo> |
| <var name="project.skin" value="${project.new-skin-name}"/> |
| </then> |
| </if> |
| <if> |
| <or> |
| <equals arg1="${project.skin}" arg2="forrest-site"/> |
| <equals arg1="${project.skin}" arg2="krysalis-site"/> |
| <equals arg1="${project.skin}" arg2="crust"/> |
| </or> |
| <then> |
| <echo level="warning"> |
| -- Warning -- |
| Using skin "${project.skin}" which is deprecated. |
| Please migrate to one of the new skins listed in forrest.properties. |
| The skin that most likely resembles these ones is called 'pelt'. |
| </echo> |
| </then> |
| </if> |
| <!-- echo settings in -Dforrest.echo=true mode --> |
| <antcall target="echo-settings" /> |
| <!-- Gather some build information about this Forrest instance, |
| to be used later by Cocoon. --> |
| <echo level="info" file="${project.temp-dir}/build-info.xml"><info> |
| <project-skin>${project.skin}</project-skin> |
| <forrest-version>${forrest.version}</forrest-version> |
| </info> |
| </echo> |
| </target> |
| <target name="examine-proj" depends="init-props"> |
| <available property="conf.present" file="${conf-dir}" type="dir"/> |
| <available property="raw-content.present" file="${raw-content-dir}" type="dir"/> |
| <available property="sitemap.present" file="${sitemap-dir}" type="dir"/> |
| <available property="xdocs.present" file="${xdocs-dir}" type="dir"/> |
| <available property="images.present" file="${images-dir}" type="dir"/> |
| <available property="grammars.present" file="${grammars-dir}" type="dir"/> |
| <available property="schema.present" file="${schema-dir}" type="dir"/> |
| <available property="stylesheets.present" file="${stylesheets-dir}" type="dir"/> |
| <available property="lib.present" file="${lib-dir}" type="dir"/> |
| <available property="classes.present" file="${classes-dir}" type="dir"/> |
| <available property="skins.present" file="${skins-dir}" type="dir"/> |
| <available property="skinconf.present" file="${skinconf}"/> |
| <available property="status.present" file="${status}"/> |
| </target> |
| <!-- Load properties from user's skinconf.xml, if it is defined --> |
| <target name="load-project-props" depends="validation-props, prepare-context" if="skinconf.present"> |
| <xslt in="${skinconf}" |
| out="${project.temp-dir}/no-doctype-project-skinconf.xml" |
| style="${forrest.core.webapp}/resources/stylesheets/strip-doctype.xsl"> |
| <xmlcatalog refid="fcatalog"/> |
| </xslt> |
| <xmlproperty file="${project.temp-dir}/no-doctype-project-skinconf.xml" |
| collapseattributes="true"/> |
| </target> |
| <!-- Load properties from Forrest's default skinconf.xml, unless a user's is defined --> |
| <target name="load-forrest-props" unless="skinconf.present"> |
| <xslt in="${forrest.core.webapp}/skinconf.xml" |
| out="${project.temp-dir}/no-doctype-forrest-skinconf.xml" |
| style="${forrest.core.webapp}/resources/stylesheets/strip-doctype.xsl"> |
| <xmlcatalog refid="fcatalog"/> |
| </xslt> |
| <!-- Forrest skinconf should have been previously validated in build.xml --> |
| <xmlproperty file="${project.temp-dir}/no-doctype-forrest-skinconf.xml" |
| collapseattributes="true"/> |
| </target> |
| <!-- Define filters equating to elements in the skinconf.xml file. Skins can |
| include tokens corresponding to skinconf.xml elements, and have them replaced |
| at runtime.--> |
| <target name="init-skinprops" depends="load-project-props, load-forrest-props"> |
| <mkdir dir="${project.temp-dir}"/> |
| <property name="skinfilters" value="${project.temp-dir}/skinfilters.properties"/> |
| <echoproperties prefix="skinconfig" destfile="${skinfilters}"/> |
| <filter filtersfile="${skinfilters}"/> |
| <condition property="use-lucene-indexer"> |
| <equals arg1="${skinconfig.search.provider}" arg2="lucene"/> |
| </condition> |
| </target> |
| <target name="check-java-version"> |
| <!-- check java version, else user may get a confusing java.lang.UnsupportedClassVersionError --> |
| <if> |
| <or> |
| <equals arg1="${ant.java.version}" arg2="1.1"/> |
| <equals arg1="${ant.java.version}" arg2="1.2"/> |
| <equals arg1="${ant.java.version}" arg2="1.3"/> |
| <equals arg1="${ant.java.version}" arg2="1.4"/> |
| </or> |
| <then> |
| <fail>Java 1.5 or higher is required; found Java ${ant.java.version} in ${java.home}</fail> |
| </then> |
| </if> |
| <echo level="info" message="This is apache-forrest-${forrest.version}"/> |
| <echo level="info" message="Using Java ${ant.java.version} from ${java.home}"/> |
| <echo level="info" message="Using ${ant.version} from ${ant.home}"/> |
| </target> |
| <target name="diagnostics" depends="init" description="Show the Ant diagnostics"> |
| <diagnostics/> |
| </target> |
| <!-- Sets up properties and filters --> |
| <target name="init" depends="check-java-version, init-props, init-skins, init-plugins"> |
| <available property="xml-forrest.jar.exists" file="${forrest.build.lib-dir}/xml-forrest.jar"/> |
| <fail unless="xml-forrest.jar.exists">You must build forrest before you can run it. In ${forrest.home}/main run './build.sh' (linux) or 'build' (windows)</fail> |
| </target> |
| <!-- =============================================================== |
| Echo's the settings if requested. [-Dforrest.echo=true] |
| =============================================================== --> |
| |
| <target name="echo-settings-condition" if="forrest.echo"> |
| <property name="forrest.echo.istrue" value="${forrest.echo}"/> |
| <condition property="echo.true"> |
| <istrue value="${forrest.echo.istrue}"/> |
| </condition> |
| </target> |
| |
| <target name="echo-settings" depends="echo-settings-condition" if="echo.true"> |
| <loadfile property="echo-settings-message" srcFile="${forrest.core}/var/echo-settings-message.txt"> |
| <filterchain> |
| <expandproperties/> |
| </filterchain> |
| </loadfile> |
| <echo level="info">${echo-settings-message}</echo> |
| </target> |
| <!-- =============================================================== |
| Set class-path. |
| =============================================================== --> |
| <target name="prepare-classpath" depends="prepare-context, -prepare-classpath"/> |
| <target name="-prepare-classpath"> |
| <path id="forrest.cp"> |
| <pathelement path="${env.CLASSPATH}" /> |
| <pathelement location="${forrest.core.webapp}/WEB-INF/classes"/> |
| <pathelement location="${forrest.build.lib-dir}/xml-forrest.jar"/> |
| <pathelement location="${project.home}/${project.classes-dir}"/> |
| <pathelement location="${project.build-dir}"/> |
| <fileset dir="${forrest.plugins-dir}" casesensitive="no"> |
| <include name="**/lib/*.jar"/> |
| <include name="**/lib/*.zip"/> |
| </fileset> |
| <fileset dir="${forrest.jetty.lib-dir}" casesensitive="no"> |
| <include name="*.jar"/> |
| <include name="*.zip"/> |
| </fileset> |
| <fileset dir="${forrest.endorsed.lib-dir}" casesensitive="no"> |
| <include name="*.jar"/> |
| <include name="*.zip"/> |
| </fileset> |
| <fileset dir="${forrest.core.lib-dir}" casesensitive="no"> |
| <include name="*.jar"/> |
| <include name="*.zip"/> |
| </fileset> |
| <fileset dir="${forrest.optional.lib-dir}" casesensitive="no"> |
| <include name="*.jar"/> |
| <include name="*.zip"/> |
| </fileset> |
| <pathelement location="${tools.jar}"/> |
| </path> |
| </target> |
| <!-- ***************************************************************** --> |
| <!-- ***************************************************************** --> |
| <!-- ** ** --> |
| <!-- ** ** --> |
| <!-- ** SITE BUILDING ACTIONS ** --> |
| <!-- ** ** --> |
| <!-- ** ** --> |
| <!-- ***************************************************************** --> |
| <!-- ***************************************************************** --> |
| <!-- =============================================================== |
| Cleans the site. (typically before generating the new version) |
| param: location to clean ${project.site-dir} |
| param: location to clean ${project.temp-dir} |
| param: location to clean ${project.webapp} |
| param: file to clean ${project.brokenlinkfile} |
| =============================================================== --> |
| <target name="clean-site" depends="init-props" |
| description="* Clean the project generated documents directory"> |
| <delete failonerror="false" dir="${project.site-dir}"/> |
| <delete failonerror="false" file="${project.brokenlinkfile}"/> |
| </target> |
| <target name="clean-work" depends="init-props" |
| description="* Clean the project work directories"> |
| <delete failonerror="false" dir="${project.temp-dir}"/> |
| <delete failonerror="false" dir="${project.webapp}"/> |
| </target> |
| <target name="clean" depends="clean-site,clean-work" |
| description="* Clean all directories and files generated during the build"/> |
| <!-- ***************************************************************** --> |
| <!-- ***************************************************************** --> |
| <!-- ** ** --> |
| <!-- ** ** --> |
| <!-- ** LOCAL SERVER RUN ACTION ** --> |
| <!-- ** ** --> |
| <!-- ** ** --> |
| <!-- ***************************************************************** --> |
| <!-- ***************************************************************** --> |
| <target name="run" |
| depends="init, check-contentdir, ensure-content, run_custom_jetty, run_default_jetty" |
| description="* Run Jetty (instant live webapp)"/> |
| <target name="run_custom_jetty" |
| if="custom_jetty_config" |
| description="Run Jetty with configuration file found in the project"> |
| <echo level="info"> |
| Note: Use Ctrl-C to stop the Jetty server |
| </echo> |
| <if> |
| <os family="dos"/> |
| <then> |
| <echo level="info"> |
| ... and reply 'n' and press [Enter] |
| when asked about aborting the batch! |
| </echo> |
| </then> |
| </if> |
| <java classname="org.mortbay.xml.XmlConfiguration" |
| dir="${forrest.core.webapp}" |
| fork="yes" |
| maxmemory="${forrest.maxmemory}" |
| failonerror="yes"> |
| <classpath> |
| <path refid="forrest.cp"/> |
| </classpath> |
| <jvmarg line="${forrest.jvmargs}"/> |
| <jvmarg |
| value="-Djava.endorsed.dirs=${java.endorsed.dirs}${path.separator}${forrest.endorsed.lib-dir}"/> |
| <arg value="${content-dir}/jettyconf.xml" /> |
| <syspropertyset> |
| <propertyref prefix="forrest."/> |
| <propertyref prefix="project."/> |
| <propertyref name="user.home"/> |
| <propertyref name="global.home"/> |
| </syspropertyset> |
| </java> |
| </target> |
| <target name="run_default_jetty" |
| description="Run Jetty with configuration file found in Forrest"> |
| <echo level="info"> |
| Note: Use Ctrl-C to stop the Jetty server |
| </echo> |
| <if> |
| <os family="dos"/> |
| <then> |
| <echo level="info"> |
| ... and reply 'n' and press [Enter] |
| when asked about aborting the batch! |
| </echo> |
| </then> |
| </if> |
| <!-- There are issues using the jetty task: |
| - getting everything we need on the classpath |
| - JNDI and Jetty Plus seem to be required |
| - system properties must be passed individually |
| --> |
| <!-- |
| <jetty tempDirectory="tmpjetty"> |
| <connectors> |
| <selectChannelConnector port="8888" /> |
| </connectors> |
| <systemProperties> |
| <systemProperty name="java.naming.factory.initial" value="org.mortbay.naming.InitialContextFactory" /> |
| <systemProperty name="java.naming.factory.url.pkgs" value="org.mortbay.naming" /> |
| <systemProperty name="forrest.core.webapp" value="${forrest.core.webapp}" /> |
| <systemProperty name="project.home" value="${project.home}" /> |
| <systemProperty name="project.content-dir" value="${project.content-dir}" /> |
| </systemProperties> |
| <webApp name="forrest" warfile="${forrest.core.webapp}" contextpath="/" scanIntervalSeconds="5"> |
| <lib dir="${forrest.core.lib-dir}" includes="*.jar" /> |
| </webApp> |
| </jetty> |
| --> |
| <java classname="org.mortbay.xml.XmlConfiguration" |
| dir="${forrest.core.webapp}" |
| fork="yes" |
| maxmemory="${forrest.maxmemory}" |
| failonerror="yes"> |
| <classpath> |
| <path refid="forrest.cp"/> |
| </classpath> |
| <jvmarg line="${forrest.jvmargs}"/> |
| <jvmarg |
| value="-Djava.endorsed.dirs=${java.endorsed.dirs}${path.separator}${forrest.endorsed.lib-dir}"/> |
| <arg value="${forrest.core.webapp}/jettyconf.xml" /> |
| <syspropertyset> |
| <propertyref prefix="forrest."/> |
| <propertyref prefix="project."/> |
| <propertyref name="user.home"/> |
| <propertyref name="global.home"/> |
| </syspropertyset> |
| </java> |
| </target> |
| <!-- ***************************************************************** --> |
| <!-- ***************************************************************** --> |
| <!-- ** ** --> |
| <!-- ** ** --> |
| <!-- ** PROXY SETTINGS ** --> |
| <!-- ** ** --> |
| <!-- ** ** --> |
| <!-- ***************************************************************** --> |
| <!-- ***************************************************************** --> |
| <target name="init-proxy" if="proxy.host" unless="proxy.already.set"> |
| <echo level="info">Using proxy : ${proxy.host}:${proxy.port}</echo> |
| <if> |
| <isset property="proxy.user"/> |
| <then> |
| <echo level="info">Proxy connection : xxxxxx/xxxxxx (confidential)</echo> |
| <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}" proxyuser="${proxy.user}" proxypassword="${proxy.password}"/> |
| </then> |
| <else> |
| <setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}"/> |
| </else> |
| </if> |
| </target> |
| </project> |