blob: 40b108bb8182d5d6bb05b5dff37d03acc86fa1c2 [file] [log] [blame]
<?xml version="1.0"?>
<!--
This Apache Ant build.xml snippet contains targets for helping out
managing the Cocoon dependencies of your project.
It assumes that you have Ant version 1.6.x or later that supports the
<import> task.
Usage: [full automatic, for fresh projects starts]
1) Copy this file to the root of your project
(e.g. to ./build-cocoon.targets.xml)
2) ant -buildfile build-cocoon-targets.xml -Dcocoon.distro.home=/...abs_path_to_cocoon_src_distro...
this will generate a typical directory-structure containing:
./build.xml (minimal version to be completed to project needs)
./user.properties (ready pointing to cocoon.distro.home)
./src/cocoon/local.build.properties
./src/cocoon/webapp
./src/cocoon/xconf
.cvsignore (ignoring build and tools/cocoon/*)
You manually start changing these as you go allong with your project.
The script will not overwrite files that already exist.
Usage: [manual, for existing build.xml files]
1) Copy this file to the root of your project
(e.g. to ./build-cocoon.targets.xml)
2) Add the following to the top-level of your project's Ant build.xml script (possibly adjusting the path):
<property name="cocoon.targets" value="./build-cocoon.targets.xml">
<import file="${cocoon.targets}">
3) Add in various properties assumed to be available (change the paths to your own liking)
<property file="user.properties">
<property name="src" value="./src" />
<property name="src.cocoon" value="${src}/cocoon" />
<property name="cocoon.build.properties" value="${src.cocoon}/local.build.properties">
<property name="cocoon.xconf.dir" value="${src.cocoon}/xconf">
<property name="cocoon.tool.dir" value="tools/cocoon">
How it works:
All targets in this build file snippet depend upon
the following properties being set
1. cocoon.distro.home
location of src distribution of cocoon to use
2. cocoon.build.properties
property file with specific cocoon build settings
(selecting which blocks, samples,...)
typically src/cocoon/local.build.properties
3. cocoon.xconf.dir
location where the appropriate patch files can be found
typically src/cocoon/xconf
4. cocoon.tool.dir
where cocoon is build inside your project
typically this is tools/cocoon
Updates and Background:
http://wiki.cocoondev.org/Wiki.jsp?page=YourCocoonBasedProject
-->
<project name="YourCocoonBasedProject" default="seed" >
<!-- if not set yet... -->
<property file="user.properties" />
<property name="src" value="./src" />
<property name="src.cocoon" value="${src}/cocoon" />
<property name="cocoon.build.properties" value="${src.cocoon}/local.build.properties" />
<property name="cocoon.xconf.dir" value="${src.cocoon}/xconf" />
<property name="cocoon.tool.dir" value="tools/cocoon" />
<property name="cocoon.unpatched" value="${cocoon.tool.dir}/unpatched"/>
<!--
sets some essential properties for these targets
-->
<target name="-cocoon:init">
<mkdir dir="${cocoon.tool.dir}" />
<property name="cocoon.webapp" value="${cocoon.tool.dir}/webapp" />
<property name="cocoon.tasks" value="${cocoon.tool.dir}/taskdefs" />
<property name="cocoon.lib" value="${cocoon.webapp}/WEB-INF/lib" />
</target>
<!--
checks what kind of OS this is running on
-->
<target name="-cocoon:oscheck" >
<condition property="isWindows">
<os family="windows" />
</condition>
</target>
<!--
creates Windows batch files for cocoon dependencies
-->
<target name="-cocoon:bat" if="isWindows"
depends="-cocoon:init, -cocoon:oscheck" >
<echo>Building batch files for support on windows OS</echo>
<property name="shbat" value="bat" />
<echo file="${cocoon.tool.dir}/getc2.${shbat}"><![CDATA[@echo off
if "%COCOON_HOME%"=="" then echo You haven't set the COCOON_HOME environment variable.
echo GOING TO %COCOON_HOME%
cd /d %COCOON_HOME%
echo Running build.bat -propertyfile %PROJECT_PROPERTIES% clean webapp -Dbuild.webapp=%PROJECT_WEBAPP% -Dtools.tasks.dest=%PROJECT_TASKDEFS%
build.bat -propertyfile %PROJECT_PROPERTIES% clean webapp -Dbuild.webapp=%PROJECT_WEBAPP% -Dtools.tasks.dest=%PROJECT_TASKDEFS%
]]></echo>
<echo file="${cocoon.tool.dir}/runc2.${shbat}"><![CDATA[@echo off
set JETTY_WEBAPP=%PROJECT_WEBAPP%
cd /d %COCOON_HOME%
cocoon.bat servlet-debug
]]></echo>
</target>
<!--
creates shell scripts for cocoon dependencies
-->
<target name="-cocoon:sh" unless="isWindows"
depends="-cocoon:init, -cocoon:oscheck" >
<echo>Building shell scripts for support on non-windows</echo>
<property name="shbat" value="sh" />
<echo file="${cocoon.tool.dir}/getc2.${shbat}"><![CDATA[#!/bin/sh
cd $COCOON_HOME
echo running /build.sh -propertyfile $PROJECT_PROPERTIES clean webapp -Dbuild.webapp=$PROJECT_WEBAPP -Dtools.tasks.dest=$PROJECT_TASKDEFS
./build.sh -propertyfile $PROJECT_PROPERTIES clean webapp -Dbuild.webapp=$PROJECT_WEBAPP -Dtools.tasks.dest=$PROJECT_TASKDEFS
]]></echo>
<chmod file="${cocoon.tool.dir}/getc2.${shbat}" perm="u+x"/>
<echo file="${cocoon.tool.dir}/runc2.${shbat}"><![CDATA[#!/bin/sh
export COCOON_WEBAPP_HOME=$PROJECT_WEBAPP
echo COCOON_WEBAPP_HOME=$COCOON_WEBAPP_HOME
cd $COCOON_HOME
./cocoon.sh servlet-debug
]]></echo>
<chmod file="${cocoon.tool.dir}/runc2.${shbat}" perm="u+x"/>
</target>
<!--
creates as needed batch files or shell scripts
-->
<target name="-cocoon:shbat" depends="-cocoon:bat, -cocoon:sh" />
<!--
checks if the cocoon dependency is holding what we expect
sets a variable if all is ok
-->
<target name="-cocoon:test" depends="-cocoon:init">
<condition property="cocoon.ok" value="true">
<and>
<available type="dir" file="${cocoon.lib}" />
<available classname="XConfToolTask"
classpath="${cocoon.tasks}"/>
</and>
</condition>
</target>
<!--
fails the build if the cocoon dependency is not met
-->
<target name="-cocoon:check" depends="-cocoon:test" unless="cocoon.ok">
<fail>No cocoon available. Run 'ant cocoon.get' first.</fail>
</target>
<target name="-cocoon:patch">
<echo>Patching ${cocoon.patch.target} with
${cocoon.xconf.dir}/*.${cocoon.patch.src-extension} ...</echo>
<xpatch
file="${cocoon.patch.target}"
srcdir="${cocoon.xconf.dir}"
includes="**/*.${cocoon.patch.src-extension}"/>
</target>
<!--
applies the patch files in the ${cocoon.xconf.dir}
on the various cocoon conf files
-->
<target name="cocoon:xconf" depends="-cocoon:check">
<path id="cocoon.tasks.cp">
<pathelement path="${cocoon.tasks}" />
<path>
<fileset dir="${cocoon.lib}">
<include name="xalan*.jar" />
<include name="xerces*.jar" />
<include name="xml*.jar" />
</fileset>
</path>
</path>
<taskdef
name="xpatch"
classname="XConfToolTask"
classpathref="cocoon.tasks.cp"/>
<xpatch file="${cocoon.webapp}/WEB-INF/cocoon.xconf" srcdir="">
<include name="${cocoon.xconf.dir}/*.xconf"/>
</xpatch>
<antcall target="-cocoon:patch" >
<param name="cocoon.patch.target"
value="${cocoon.webapp}/WEB-INF/cocoon.xconf" />
<param name="cocoon.patch.src-extension"
value="xconf" />
</antcall>
<antcall target="-cocoon:patch" >
<param name="cocoon.patch.target"
value="${cocoon.webapp}/WEB-INF/logkit.xconf" />
<param name="cocoon.patch.src-extension"
value="xlog" />
</antcall>
<antcall target="-cocoon:patch" >
<param name="cocoon.patch.target"
value="${cocoon.webapp}/sitemap.xmap" />
<param name="cocoon.patch.src-extension"
value="xmap" />
</antcall>
<antcall target="-cocoon:patch" >
<param name="cocoon.patch.target"
value="${cocoon.webapp}/WEB-INF/web.xml" />
<param name="cocoon.patch.src-extension"
value="xweb" />
</antcall>
</target>
<target name="cocoon:unpatch">
<copy todir="${cocoon.webapp}" overwrite="true" >
<fileset dir="${cocoon.unpatched}">
<include name="WEB-INF/web.xml" />
<include name="WEB-INF/cocoon.xconf" />
<include name="WEB-INF/logkit.xconf" />
<include name="sitemap.xmap" />
</fileset>
</copy>
</target>
<target name="cocoon:get" depends="-cocoon:shbat" description="Get cocoon into this project">
<mkdir dir="${cocoon.webapp}" />
<exec executable="${cocoon.tool.dir}/getc2.${shbat}" >
<env key="COCOON_HOME" file="${cocoon.distro.home}" />
<env key="PROJECT_PROPERTIES" file="${cocoon.build.properties}" />
<env key="PROJECT_WEBAPP" file="${cocoon.webapp}" />
<env key="PROJECT_TASKDEFS" file="${cocoon.tasks}" />
</exec>
<mkdir dir="${cocoon.unpatched}" />
<copy todir="${cocoon.unpatched}">
<fileset dir="${cocoon.webapp}" >
<include name="WEB-INF/web.xml" />
<include name="WEB-INF/cocoon.xconf" />
<include name="WEB-INF/logkit.xconf" />
<include name="sitemap.xmap" />
</fileset>
</copy>
</target>
<target name="cocoon:run" depends="-cocoon:shbat, -cocoon:check" description="Run cocoon on the built-in jetty to test">
<exec executable="${cocoon.tool.dir}/runc2.${shbat}" >
<env key="COCOON_HOME" file="${cocoon.distro.home}" />
<env key="PROJECT_WEBAPP" file="${cocoon.webapp}" />
</exec>
</target>
<!--
Below are some targets that build a default project-setting which allows you to
make use of the reusable targets declared in this build-script.
You can launch the 'seed' target to start-off your project.
-->
<target name="seed-check">
<available property="cocoonHomeOk" file="${cocoon.distro.home}" />
<fail unless="cocoonHomeOk" >
This script needs a property $${cocoon.distro.home} to be set and
pointing to an existing directory containing a cocoon 2.1.x distro.
You can set it either by providing a -D flag to ant, or
by adding it to a local ./user.properties.
</fail>
<available property="existsBuild" file="build.xml" />
<available property="existsLocalProps" file="${cocoon.build.properties}" />
<available property="existsUserProps" file="user.properties" />
<available property="existsCvsIgnore" file=".cvsignore" />
</target>
<target name="msg-seed-build" if="existsBuild">
<echo>build.xml exists. This script cannot overwrite it.
If you want to regenerate the build.xml then manually delete it prior to running the seed target again.</echo>
</target>
<target name="seed-build" depends="msg-seed-build" unless="existsBuild">
<echo>Creating build.xml...</echo>
<echo file="build.xml"><![CDATA[<?xml version="1.0"?>
<!--
File automatically generated by ant script for YourCocoonBasedProject.
Manually extend it to your own needs.
-->
<project name="YourProjectName" default="init">
<property file="user.properties" />
<property name="src" value="src" />
<property name="src.java" value="${src}/java" />
<property name="src.cocoon" value="${src}/cocoon" />
<property name="src.webapp" value="${src.cocoon}/webapp" />
<property name="build" value="build" />
<property name="build.classes" value="${build}/classes" />
<property name="zipfile" value="${build}/${ant.project.name}.zip" />
<property name="warfile" value="${build}/${ant.project.name}.war" />
<property name="lib" value="lib" />
<property name="cocoon-build.properties" value="${src.cocoon}/local.build.properties" />
<property name="cocoon-xconf.dir" value="${src.cocoon}/xconf" />
<property name="cocoon-tool.dir" value="tools/cocoon" />
<property name="cocoon.webapp" value="${cocoon-tool.dir}/webapp" />
<property name="cocoon.lib" value="${cocoon.webapp}/WEB-INF/lib" />
<property name="cocoon.classes" value="${cocoon.webapp}/WEB-INF/classes" />
<property name="cocoon-targets" value="${ant.file}" />
<!-- insert properties here to override defaults in the import cocoon-targets script -->
<import file="$${cocoon-targets}" />
<path id="all.cp">
<pathelement location="${build.classes}" />
<fileset dir="${cocoon.lib}">
<include name="*.jar"/>
</fileset>
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="${build.classes}" />
</target>
<target name="compile" depends="init,-cocoon:check" >
<javac srcdir="${src.java}" destdir="${build.classes}" debug="true" >
<classpath refid="all.cp"/>
<include name="**/*.java"/>
</javac>
</target>
<target name="webapp" depends="compile, cocoon:xconf"
description="configure the webapp">
<copy todir="${cocoon.lib}">
<fileset dir="${lib}">
<include name="*.jar"/>
</fileset>
</copy>
<copy todir="${cocoon.classes}">
<fileset dir="${build.classes}" />
</copy>
<copy todir="${cocoon.webapp}">
<fileset dir="${src.webapp}" />
</copy>
</target>
<target name="zip" depends="init">
<zip zipfile="${zipfile}" basedir="." excludes="**/build/**, tools/**" />
</target>
<target name="war" depends="webapp" >
<jar destfile="${warfile}" basedir="${cocoon.webapp}" />
</target>
</project>
]]></echo>
</target>
<target name="seed-dirs">
<mkdir dir="${src.cocoon}" />
<mkdir dir="${src.cocoon}/webapp" />
<mkdir dir="${cocoon.xconf.dir}" />
<mkdir dir="${cocoon.tool.dir}" />
<mkdir dir="${cocoon.tool.dir}/webapp" />
<mkdir dir="src/java" />
<mkdir dir="lib" />
</target>
<target name="msg-seed-userprops" if="existsUserProps">
<echo>user.properties already exists. This script cannot overwrite it.
If you want to regenerate the user.properties then manually delete it prior to running the seed target again.</echo>
</target>
<target name="seed-userprops" depends="msg-seed-userprops" unless="existsUserProps">
<echo file="user.properties">#
# File automatically generated by ant script for YourCocoonBasedProject.
# Manually extend it to your own needs.
#
cocoon.distro.home=${cocoon.distro.home}</echo>
</target>
<target name="msg-seed-cvsignore" if="existsCvsIgnore">
<echo>.cvsignore already exists. This script cannot overwrite it.
If you want to regenerate the .cvsignore then manually delete it prior to running the seed target again.</echo>
</target>
<target name="seed-cvsignore" depends="msg-seed-cvsignore" unless="existsCvsIgnore">
<echo file=".cvsignore">build
tools
user.properties</echo>
</target>
<target name="msg-seed-localprops" if="existsLocalProps" >
<echo>${cocoon.build.properties} already exists. This script cannot overwrite it.
If you want to regenerate the ${cocoon.build.properties} then manually delete it prior to running the seed target again.</echo>
</target>
<target name="seed-localprops"
depends="msg-seed-localprops, seed-dirs"
unless="existsLocalProps" >
<concat destfile="${cocoon.build.properties}" >
<fileset dir="${cocoon.distro.home}">
<include name="build.properties" />
<include name="blocks.properties" />
</fileset>
</concat>
</target>
<target name="seed" depends="seed-check, seed-localprops, seed-cvsignore, seed-userprops, seed-build">
<echo>Done.
The directory src/cocoon/webapp is created to hold your cocoon
webapp resources.
The directory src/cocoon/xconf is created to hold XConfPatch files
to (optionally) modify the cocoon.xconf log.xconf web.xml and
(root) sitemap.xmap
From here:
---------
You should now edit the file ${cocoon.build.properties} to select
only those optional components of Cocoon that your project needs.
IMPORTANT: Remove the path-entries from that file!
The build.xml can freely be extended for your project needs.
To build a fresh Cocoon base for this project
(when you updated the distro pointed to by -Dcocoon.distro.home)
> ant cocoon:get
To blend in your own project resources and classes:
> ant webapp
To test-run using the Jetty container:
> ant cocoon:run
</echo>
</target>
</project>