blob: 7bf263b3b9c7d8f16d1ad0db617043a06f64b1b7 [file] [log] [blame]
<?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">&lt;info>
&lt;project-skin>${project.skin}&lt;/project-skin>
&lt;forrest-version>${forrest.version}&lt;/forrest-version>
&lt;/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>