265 lines
11 KiB
XML
265 lines
11 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!-- ANT build file which copies CCM addon packages into an deployed CCM application
|
|
and thus extends its functionality.
|
|
It checks for package dependencies, and installation consistency (e.g. completes
|
|
the web.xml file if necessary.
|
|
|
|
TASKS (targets):
|
|
list lists avaiblable addon packages in source repo.
|
|
add {packagelist} adds one or more packages to the aplaws application directory.
|
|
info {package} displays info about a package (from package's application.xml).
|
|
-->
|
|
|
|
<!-- Required variables:
|
|
ccm.home.dir: base dir of the web application (document root)
|
|
Example: /srv/aplaws/webapps/ROOT
|
|
Target of deployment
|
|
ccm.repo.dir: base dir where ccm packages are stored.
|
|
Example: /home/aplaws/aplaws-repo
|
|
Source of deployment
|
|
-->
|
|
<project name="CCM Content and Collaboration Management HostInit task " default="usage">
|
|
<description>HostInit deploys CCM into a servlet container. Specifically it deploys
|
|
ADDON packages.
|
|
</description>
|
|
<taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
|
|
<taskdef name="webxmlmerge"
|
|
classname="com.arsdigita.ant.WebXMLMergeTask"
|
|
classpath="webxml-mergetool.jar"/>
|
|
|
|
<!-- base directory of the development environment
|
|
default is parent directory of build.xml (sysprop basedir) -->
|
|
<!-- Prefix used to access environment variables, globally visibel -->
|
|
<property environment="env"/>
|
|
|
|
<target name="list" depends="init">
|
|
|
|
<dirset id="repo.contents" dir="${ccm.repo.dir}" includes="ccm-*"/>
|
|
<property name="prop.repo.contents" refid="repo.contents"/>
|
|
<propertyregex property="prop.repo.filelist"
|
|
input="${prop.repo.contents}"
|
|
regexp=";"
|
|
replace="${line.separator}"
|
|
override="true"
|
|
defaultValue="no match"
|
|
global="true" />
|
|
<echo message=" " />
|
|
<echo message="Packages available:" />
|
|
<echo message="===================" />
|
|
<echo message=" " />
|
|
<echo message="${prop.repo.filelist}"/>
|
|
|
|
</target>
|
|
|
|
|
|
<target name="add" depends="init">
|
|
|
|
<echo message="Packages requested: ${ccm.requested.packages}" />
|
|
<echo message=" " />
|
|
|
|
<foreach target="copy-package"
|
|
param="packagename"
|
|
list="${ccm.requested.packages}"
|
|
delimiter=" " />
|
|
|
|
</target>
|
|
|
|
<target name="copy-package" depends="package-notInstalled,package-dependenciesOK" >
|
|
|
|
<echo>Package working on: ${packagename} </echo>
|
|
|
|
<copy todir="${ccm.home.dir}"
|
|
overwrite="true"
|
|
includeEmptyDirs="true"
|
|
failonerror="false"
|
|
verbose="true" >
|
|
<fileset dir="${ccm.repo.dir}/${packagename}/web" />
|
|
</copy>
|
|
<copy todir="${ccm.home.dir}/WEB-INF/lib"
|
|
overwrite="true"
|
|
includeEmptyDirs="true"
|
|
failonerror="false"
|
|
verbose="true" >
|
|
<fileset dir="${ccm.repo.dir}/${packagename}" includes="*.jar" />
|
|
</copy>
|
|
<copy todir="${ccm.home.dir}/WEB-INF/lib"
|
|
overwrite="true"
|
|
includeEmptyDirs="true"
|
|
failonerror="false"
|
|
verbose="true" >
|
|
<fileset dir="${ccm.repo.dir}/${packagename}/lib" />
|
|
</copy>
|
|
|
|
<if>
|
|
<resourceexists>
|
|
<file file="${ccm.repo.dir}/${packagename}/web/WEB-INF/web.d/web.${packagename}.xml"/>
|
|
</resourceexists>
|
|
|
|
<then>
|
|
<echo message="Merging web.${packagename}.xml" />
|
|
|
|
<webxmlmerge originalfile="${ccm.home.dir}/WEB-INF/web.xml"
|
|
mergefile="${ccm.repo.dir}/${packagename}/web/WEB-INF/web.d/web.${packagename}.xml"
|
|
destfile="${ccm.home.dir}/WEB-INF/.merged.web.xml" />
|
|
|
|
<copy file="${ccm.home.dir}/WEB-INF/.merged.web.xml"
|
|
tofile="${ccm.home.dir}/WEB-INF/web.xml"
|
|
overwrite="yes"/>
|
|
<delete file="${ccm.home.dir}/WEB-INF/.merged.web.xml"/>
|
|
|
|
</then>
|
|
|
|
<else>
|
|
<echo message="No web.xml fragment to merge." />
|
|
</else>
|
|
|
|
</if>
|
|
<echo>Installation of package ${packagename} completed. </echo>
|
|
<echo message=" " />
|
|
|
|
</target>
|
|
|
|
<target name="package-notInstalled" depends="init">
|
|
<!-- Target will fail and abort build if parameter packagename
|
|
is already installed in property war.packages.config -->
|
|
<fail message="${packagename} already installed! " >
|
|
<condition >
|
|
<matches string="${waf.config.packages}"
|
|
pattern="${packagename}" />
|
|
</condition>
|
|
</fail>
|
|
</target>
|
|
|
|
<target name="package-dependenciesOK" depends="init">
|
|
<!-- Target will fail and abort build if parameter packagename
|
|
has dependencies which are not already installed.
|
|
Each package must have at least 1 dependency: ccm-core. -->
|
|
<xmlproperty file="${ccm.repo.dir}/${packagename}/application.xml"
|
|
collapseAttributes="true" />
|
|
<fail message="${packagename} has no requirements defined. Contact developer!"
|
|
unless="ccm:application.ccm:dependencies.ccm:requires.name" />
|
|
|
|
<echo message="Checking dependencies for ${packagename}" />
|
|
<foreach target="package-dependencyCheck"
|
|
param="requirement"
|
|
list="${ccm:application.ccm:dependencies.ccm:requires.name}"
|
|
delimiter="," />
|
|
</target>
|
|
|
|
<target name="package-dependencyCheck" depends="init">
|
|
|
|
<fail message="${requirement} not installed nor in installation list! " >
|
|
<condition >
|
|
<not>
|
|
<or>
|
|
<matches string="${waf.config.packages}"
|
|
pattern="${packagename}" />
|
|
<matches string="${ccm.requested.packages}"
|
|
pattern="${packagename}" />
|
|
</or>
|
|
</not>
|
|
</condition>
|
|
</fail>
|
|
<echo message="Requirement ${requirement} fullfilled." />
|
|
|
|
</target>
|
|
|
|
|
|
<target name="info" depends="init">
|
|
|
|
<echo>Info requested for Package(s): </echo>
|
|
<echo>${ccm.requested.packages}</echo>
|
|
|
|
<foreach target="show-info"
|
|
param="packagename"
|
|
list="${ccm.requested.packages}"
|
|
delimiter=" " />
|
|
|
|
</target>
|
|
|
|
<target name="show-info" >
|
|
|
|
<!-- for debugging
|
|
<echo> Package working on: ${dirname} </echo> -->
|
|
<xmlproperty file="${ccm.repo.dir}/${packagename}/application.xml"
|
|
collapseAttributes="true" />
|
|
|
|
<echo message=" " />
|
|
<echo message="${ccm:application.name}: ${ccm:application.prettyName}" />
|
|
<echo message="================================================================" />
|
|
<echo message=" " />
|
|
<echo message="${ccm:application.ccm:description}" />
|
|
<echo message=" " />
|
|
<echo message="Requires:" />
|
|
<echo message="${ccm:application.ccm:dependencies.ccm:requires.name}" />
|
|
|
|
</target>
|
|
|
|
|
|
<target name="init">
|
|
<!-- Initialisation task: Sets initial values for several properties, checks
|
|
existence of required properties or system values, checks and evaluates
|
|
command line parameters. -->
|
|
|
|
<!-- root project dir (where build.xml lives, WEB-INF/bin/libexec by default -->
|
|
<property name="ccm.project.dir" value="${basedir}" />
|
|
|
|
<!-- Check for required variables -->
|
|
<!-- Property ccm.home.dir must be defined by invoking script! -->
|
|
<fail message="ccm.home.dir or CCM_HOME_DIR not set.
|
|
Please check the configuration."
|
|
unless="ccm.home.dir" />
|
|
<!-- Property ccm.repo.dir must be defined by invoking script! -->
|
|
<fail message="ccm.repo.dir or CCM_REPO_DIR not set.
|
|
Please check the configuration."
|
|
unless="ccm.repo.dir" />
|
|
|
|
<if>
|
|
<isset property="ccm.packages.filename" />
|
|
|
|
<then>
|
|
<!-- <echo message="Processing file ${ccm.packages.filename}" /> -->
|
|
<loadfile property="ccm.requested.packages"
|
|
srcFile="${ccm.packages.filename}" >
|
|
<!-- Probably a bug in loadfile: Without striplinebreak an addional
|
|
(empty) element is added to the property -->
|
|
<filterchain>
|
|
<striplinebreaks/>
|
|
</filterchain>
|
|
|
|
</loadfile>
|
|
<fail message="File ${ccm.packages.filename} not valid."
|
|
unless="ccm.requested.packages" />
|
|
|
|
</then>
|
|
<else>
|
|
<!-- Property ccm.packages must be defined by invoking script
|
|
if no file for package list is definded. May be empty. -->
|
|
<fail message="ccm.packages not set.
|
|
Please check input and configuration."
|
|
unless="ccm.packages" />
|
|
|
|
|
|
<property name="ccm.requested.packages" value="${ccm.packages}" />
|
|
</else>
|
|
</if>
|
|
|
|
<!-- Registry for waf.config.packages must exist. -->
|
|
<property file="../../conf/registry/registry.properties"/>
|
|
<fail message="Registry not found. Guess: try to use 'ccm prepare' first."
|
|
unless="waf.config.packages" />
|
|
|
|
</target>
|
|
|
|
<target name="usage">
|
|
<echo>
|
|
Base directory is ${basedir}
|
|
USAGE:
|
|
ccm-host list lists avaiblable addon packages
|
|
ccm-host add {packagelist} adds one or more packages to the aplaws application directory.
|
|
ccm-host info {package} displays info about a package.
|
|
</echo>
|
|
</target>
|
|
|
|
</project>
|