blob: ce8e5b74d057cf4bc9ff220f69101e088810ac86 [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.
-->
<project default="run-webapp" basedir="." name="run-webapp">
<target name="project.webapp.defined" unless="project.webapp">
<fail>
------------------------------------------------
Error: $${project.webapp} variable has not been set. This is where the
webapp will be assembled. Please define it in the calling script.
------------------------------------------------
</fail>
</target>
<!-- ===============================================================
Builds a cocoon webapp for local execution.
Note, this webapp is not suitable for deploying remotely as it
is configured to allow editing of files in the ${project.home}
directory.
param: location to put generated webapp ${project.webapp}
=============================================================== -->
<target name="webapp-local" depends="init, validate, project.webapp.defined, ensure-content, prepare-context,
load-project-props"
description="Generates a dynamic servlet-based website (an unpackaged webapp). Note this webapp is suitable for local execution only, use the 'war' or 'webapp' target if you wish to deploy remotely.">
<!-- this will need revisions in the case of the siteplan
extra project-custom classes then will need to be warred in as well. -->
<!-- should be already there
<mkdir dir="${project.webapp}/WEB-INF"/>
<copy file="${forrest.core.webapp}/WEB-INF/web.xml" filtering="true"
todir="${project.webapp}/WEB-INF"/>
-->
<!-- Prepare the Lucene search index -->
<condition property="use-lucene-indexer">
<equals arg1="${skinconfig.search.provider}" arg2="lucene"/>
</condition>
<antcall target="lucene-index" />
<available file="${content-dir}/jettyconf.xml"
property="custom_jetty_config"/>
<loadfile property="webapp-local-generated-message" srcFile="${forrest.core}/var/webapp-local-generated-message.txt">
<filterchain>
<expandproperties/>
</filterchain>
</loadfile>
<echo level="info">${webapp-local-generated-message}</echo>
</target>
<!-- ===============================================================
Builds a cocoon webapp of your project for remote deployment.
param: location to put generated webapp ${project.webapp}
=============================================================== -->
<target name="run-webapp" depends="webapp-local, copy-xdocs, copy-content"
description="Generates a dynamic servlet-based website (an unpackaged webapp).">
<!--
Copy libs
-->
<copy toDir="${project.webapp}/WEB-INF/lib"
overwrite="true" failonerror="false">
<fileset dir="${lib-dir}"/>
</copy>
<copy toDir="${project.webapp}/WEB-INF/classes"
overwrite="true" failonerror="false">
<fileset dir="${classes-dir}"/>
</copy>
<copy todir="${project.webapp}/WEB-INF/lib">
<!-- Note: no overwriting, so user's libs and classes get preference -->
<fileset dir="${forrest.core.lib-dir}">
<include name="**.jar"/>
</fileset>
<fileset dir="${forrest.optional.lib-dir}">
<include name="**.jar"/>
</fileset>
<fileset dir="${forrest.endorsed.lib-dir}">
<include name="**.jar"/>
</fileset>
</copy>
<copy todir="${project.webapp}/WEB-INF/lib">
<fileset dir="${forrest.build.lib-dir}">
<include name="**.jar"/>
</fileset>
</copy>
<copy toDir="${project.webapp}/WEB-INF/classes">
<fileset dir="${forrest.core.webapp}/WEB-INF/classes"/>
</copy>
<!-- Copy XML jars if not running JDK 1.4 (where they're built-in) -->
<available property="jdk1.4+" classname="java.lang.CharSequence"/>
<copy todir="${project.webapp}/WEB-INF/lib">
<fileset dir="${forrest.endorsed.lib-dir}">
<include name="*jar" unless="jdk1.4+"/>
</fileset>
</copy>
<!-- Copy custom plugin jars -->
<for list="${project.required.plugins}" param="name">
<sequential>
<copy file="${forrest.plugins-dir}/lib/@{name}.jar"
todir="${project.webapp}/WEB-INF/lib"
failonerror="false"/>
</sequential>
</for>
<!--
| Copy all non-xdocs content across to the webapp
-->
<mkdir dir="${project.webapp}/project"/>
<copy toDir="${project.webapp}/project" overwrite="true" failonerror="false">
<fileset dir="${project.home}">
<include name="forrest.properties"/>
<include name="forrest.properties.xml"/>
<include name="${project.status}"/>
<include name="${project.content-dir}/**"/>
</fileset>
</copy>
<!-- Copy the file which contains the build information -->
<copy toDir="${project.webapp}/project/build/tmp"
file="${project.temp-dir}/build-info.xml"/>
<!-- Copy the generated locationmap for plugins -->
<copy toDir="${project.webapp}/project/build/tmp"
file="${project.temp-dir}/locationmap.xml"/>
<!-- Grab the plugin xmaps as these are no longer in the
plugins-dir.
During the build, the plugin information is copied during the
init-plugins task. However, those are not sufficient when
creating a deployable war file. That is because the
properties used for "project.webapp", "project.home" etc.
have different values when being built and when being run as
a war file.
The value of "todir" below corresponds to
{properties:temp-dir} when running as a web application. -->
<copy todir="${project.webapp}/project/build/tmp">
<fileset dir="${project.temp-dir}">
<include name="*.xmap"/>
</fileset>
</copy>
<loadfile property="webapp-generated-message"
srcFile="${forrest.core}/var/webapp-generated-message.txt">
<filterchain>
<expandproperties/>
</filterchain>
</loadfile>
<echo level="info">${webapp-generated-message}</echo>
</target>
<target name="copy-xdocs" if="xdocs.present"></target>
<target name="copy-content" if="raw-content.present"></target>
<!-- ===============================================================
Builds a cocoon .war for your project based on the siteplan.
param: location to put generated war ${project.war}
=============================================================== -->
<target name="war" depends="run-webapp"
description="* Generates a dynamic servlet-based website (a packaged .war file)">
<xslt force="true"
in="${project.webapp}/WEB-INF/cocoon.xconf"
out="${project.webapp}/WEB-INF/cocoon.xconf2"
style="${forrest.core}/var/fixWarXconf.xsl">
<outputproperty name="indent" value="yes"/>
</xslt>
<!-- FIXME: The xslt task did not like writing to the same file (Mac OS X?) -->
<move file="${project.webapp}/WEB-INF/cocoon.xconf2" tofile="${project.webapp}/WEB-INF/cocoon.xconf"/>
<!-- Generate the war.
We need to copy not only the core libararies but as well any that may come from
the plugins (cp. FOR-1074) -->
<war destfile="${project.war}"
webxml="${project.webapp}/WEB-INF/web.xml">
<lib dir="${project.webapp}/WEB-INF/lib">
<include name="*.jar"/>
<exclude name="servlet*.jar"/>
</lib>
<lib dir="${forrest.home}/${build.plugins-dir}/lib">
<include name="*.jar"/>
<exclude name="servlet*.jar"/>
</lib>
<webinf dir="${project.webapp}/WEB-INF">
<exclude name="**/web.xml"/>
<exclude name="**/lib/*"/>
</webinf>
<fileset dir="${project.webapp}">
<exclude name="**/WEB-INF/"/>
</fileset>
<fileset dir="${forrest.home}">
<exclude name="${build.plugins-dir}/**/lib/"/>
<include name="${build.plugins-dir}/**"/>
</fileset>
</war>
<!-- Finishing by echoing the location of the ready to use war -->
<echo level="info">
---------------------------------
Webapp .war file generated:
${project.war}
---------------------------------
</echo>
</target>
</project>