Copyright (c) 2000-2009, Jasig, Inc.
See license distributed with this file and available online at
https://www.ja-sig.org/svn/jasig-parent/tags/rel-10/license-header.txt
-->
<!--
| Detailed help documenation lives in docs/antHelp.txt, please refer to this file or
| run 'ant help' for usage of this file.
|
| Comments in this file should be targeted to the maintenance of the build script.
+-->
<project name="uPortal" default="help" basedir="." xmlns:up="urn:up-util-ant" xmlns:artifact="urn:maven-artifact-ant">
<fail message="build.properties does not exist, please copy build.properties.sample and fill in your settings.">
<condition>
<not>
<available file="${basedir}/build.properties" />
</not>
</condition>
</fail>
<!--
| Load the build properties before the next fail tests since they check properties provided
| by the file.
+-->
<property environment="env" />
<property file="${basedir}/build.properties" />
<property name="jasig.tmpdir" value="${java.io.tmpdir}/jasig" />
<mkdir dir="${jasig.tmpdir}" />
<!-- ----------------------------== Public Targets ----------------------------== -->
<target name="help" description="Prints information about using this ant build file.">
<loadfile property="helpMessage" srcFile="docs/antHelp.txt" />
<echo message="${helpMessage}" />
</target>
<target name="initportal" depends="prodPrompt" description="Runs all the targets necessary to deploy the portal and prepare the portal database">
<echo message="Initializing uPortal" />
<antcall target="deploy-ear">
<param name="removeExisting" value="true" />
</antcall>
<antcall target="initdb" />
<echo message="Finished initializing uPortal" />
</target>
<target name="initdb" depends="prodPrompt" description="Drops all tables, then runs all the targets necessary prepare the portal database">
<echo message="Initializing database" />
<antcall target="db" />
<antcall target="db-hibernate" />
<antcall target="i18n-db" />
<antcall target="db-import" />
<echo message="Finished initializing database" />
</target>
<target name="db-import" depends="prodPrompt" description="Imports the default XML files to the database">
<echo message="Importing data" />
<antcall target="crn-import">
<param name="dir" value="${basedir}/uportal-impl/src/main/resources/properties/db/entities" />
</antcall>
</target>
<target name="dbtest" description="Displays information about the database defined in rdbm.properties">
<uportal-impl-macro>
<echo message="Invoking DbTest" />
<java fork="true" failonerror="true" dir="${basedir}" classname="org.jasig.portal.tools.DbTest">
<sysproperty key="log4j.configuration" value="command-line.log4j.properties" />
<target name="crn-export" description="Exports the specified entity or entities to XML on the file system">
<uportal-impl-macro>
<!-- Three properties control the export: dir, type, and sysid -->
<fail unless="type">
You must specify a "type" parameter (-Dtype={something}) from the following: all, layout,
all-layouts, channel, all-channels, all-permissions, all-memberships, group, all-groups, user,
all-users.
</fail>
<target name="crn-import" depends="prodPrompt" description="Imports the specified XML file or files">
<uportal-impl-macro>
<!-- Two properties control the import: dir and pattern -->
<property name="dir" value="." />
<property name="pattern" value="org.jasig.portal.FilePatternPhrase.USE_DEFAULT_VALUE "/>
<target name="crn-delete" depends="prodPrompt" description="Deletes the specified entity">
<uportal-impl-macro>
<fail unless="type">
You must specify a "type" parameter (-Dtype={something}) from the following: layout, channel,
group, user.
</fail>
<fail unless="sysid">
You must specify a "sysid" parameter (-Dsysid={something}). The value will be a valid username
(user or layout), fname (channel), or name (group).
</fail>
<target name="clean-shared" depends="checkForTomcat" description="Removes the ALL shared libraries from the container.">
<delete>
<fileset dir="${server.base}/shared/lib">
<include name="*"/>
</fileset>
</delete>
</target>
<target name="clean-tomcat" depends="checkForTomcat" description="Removes the deployed uPortal from the container">
<uportal-parent-macro>
<!-- Clean out uPortal from Tomcat -->
<artifact:pom file="${uportal-war.dir}/pom.xml" id="uportal-war.pom" />
<property name="destDir" value="${server.base}/webapps/${uportal-war.pom.build.finalName}" />
<echo>Deleting '${destDir}'</echo>
<delete dir="${destDir}" />
</uportal-parent-macro>
</target>
<target name="md5passwd" depends="prodPrompt" description="Creates a user in the UP_PERSON_DIR table">
<uportal-impl-macro>
<property name="username" value=" " />
<target name="deluser" depends="prodPrompt" description="Delete traces of a user from the portal database">
<uportal-impl-macro>
<property name="user" value=" " />
<target name="hsql" description="Start a HSQLDB instance consistent with the default RDBMS requirements of uPortal">
<property name="spawn" value="false" />
<target name="hsql-shutdown" description="Compacts then cleanly shuts down hsql, useful if the 'hsql' task was run with '-Dspawn=true'">
<uportal-parent-macro>
<artifact:dependencies pathid="hsql.classpath" verbose="false">
<pom file="${bootstrap-pom.dir}/hsqldb-pom.xml" />
</artifact:dependencies>
<!-- ----------------------------== Utility Targets ----------------------------== -->
<!--
| Utility to deploy a WAR to the container where the delete and the replacement happen
| as close together as possible.
+-->
<target name="fastWarDeploy">
<fail message="'-DwarPath=[WAR File]' must be specified">
<condition>
<not>
<isset property="warPath" />
</not>
</condition>
</fail>
<target name="prodPrompt">
<if>
<and>
<istrue value="${prodPrompt}" />
<not>
<isset property="continueWithProdTarget" />
</not>
</and>
<then>
<echo>WARNING: This task may change or destroy data and should be run with care in production environments.</echo>
<input message="Do you want to continue: " validargs="y,n" addproperty="continueWithProdTarget"/>
<condition property="do.abort">
<equals arg1="n" arg2="${continueWithProdTarget}"/>
</condition>
<fail if="do.abort">Task aborted by user.</fail>
</then>
</if>
</target>
<target name="checkForTomcat">
<fail message="server.base build property must be set.">
<condition>
<not>
<isset property="server.base" />
</not>
</condition>
</fail>
<fail message="The server.base build property refers to a non-existant location '${server.base}'">
<condition>
<not>
<available file="${server.base}" type="dir" />
</not>
</condition>
</fail>
</target>
<!-- ----------------------------== Deprecated Targets ----------------------------== -->
<target name="all">
<echo>The "all" Ant task is no longer supported. Run 'mvn clean compile' for the same result.</echo>
<fail message="The 'all' Ant task is no longer supported. Run 'mvn clean compile' for the same result.">
</fail>
</target>
<target name="compile">
<echo>The "compile" Ant task is no longer supported. Run 'mvn compile' for the same result.</echo>
<fail message="The 'compile' Ant task is no longer supported. Run 'mvn compile' for the same result.">
</fail>
</target>
<target name="compiletests">
<echo>The "compiletests" Ant task is no longer supported. Run 'mvn test-compile' for the same result.</echo>
<fail message="The 'compiletests' Ant task is no longer supported. Run 'mvn test-compile' for the same result.">
</fail>
</target>
<target name="deploy">
<echo>The "deploy" Ant task is no longer supported. Run 'ant deploy-war' for the same result.</echo>
<fail message="The 'deploy' Ant task is no longer supported. Run 'ant deploy-war' for the same result.">
</fail>
</target>
<target name="dist">
<echo>The "dist" Ant task is no longer supported. Run 'mvn package site' for a similar result.</echo>
<fail message="The 'dist' Ant task is no longer supported. Run 'mvn package site' for the same result.">
</fail>
</target>
<target name="javadoc">
<echo>The "javadoc" Ant task is no longer supported. Run 'mvn javadoc:javadoc' for the same result.</echo>
<fail message="The 'javadoc' Ant task is no longer supported. Run 'mvn javadoc:javadoc' for the same result.">
</fail>
</target>
<target name="runtests">
<echo>The "runtests" Ant task is no longer supported. Run 'mvn test' for the same result.</echo>
<fail message="The 'runtests' Ant task is no longer supported. Run 'mvn test' for the same result.">
</fail>
</target>
<target name="pubchan">
<echo>The "pubchan" Ant task is no longer supported. Use 'ant crn-import' to publish channel entity XML files.</echo>
<fail message="The 'pubchan' Ant task is no longer supported. Run 'ant crn-import' for the same result.">
</fail>
</target>
<!-- ----------------------------== Maven Support Macros ----------------------------== -->
<!--
| Macro that simply calls the install-root-pom target using an 'ant' task instead of the
| 'antcall' task to ensure the Maven tasks aren't tainted by a failed loading of the parent
| pom.
+-->
<macrodef name="uportal-parent-macro">
<element name="sub-tasks" optional="false" implicit="true" />
<sequential>
<!--
| Called via the <ant> task so the install happens in a different classloader. This
| is required so an initial install which is missing jasig-parent doesn't cause problems
| later due to the failed load of jasig-parent being cached.
+-->
<if>
<not>
<available file="${parentPomInstallMarker.file}" />
</not>
<then>
<ant antfile="${basedir}/build.xml" target="install-parent-pom" />
<touch file="${parentPomInstallMarker.file}" />
</then>
</if>
<!--
| Macro for tasks involving a maven project. The macro loads the pom, creates a classpath,
| ensures the project artifact is up-to-date, and runs the <sub-tasks> element. If the
| artifact is not up-to-date the <pre-package> element can be used to add behavior before
| 'mvn package' is called on the project.
|
| The following are available in the pre-package and sub-tasks elements:
| pom object - @{project-name}.pom - The Maven POM object for the project
| property - @{project-name}.artifact - The full path to the final artifact
| path - @{project-name}.classpath - The projects classpath not including the artifact
+-->
<macrodef name="maven-artifact-macro">
<attribute name="project-name" />
<attribute name="project-path" />
<attribute name="checkFilesId" default="null" />
<!--
| Define the location of the resulting artifact
+-->
<property name="@{project-name}.artifact" value="${@{project-name}.pom.build.directory}/${@{project-name}.pom.build.finalName}.${@{project-name}.pom.packaging}" />
<!--
| Parse out the target directory without the preceding project path
+-->
<length property="@{project-name}.path.length" string="@{project-path}/" />
<propertyregex property="@{project-name}.build.directory" input="${@{project-name}.pom.build.directory}" regexp=".{${@{project-name}.path.length}}(.*)" select="\1" />
<!--
| Call 'mvn package' if files in the project are not up-to-date
+-->
<if>
<not>
<and>
<equals arg1="${@{project-name}.projectFilesUTD}" arg2="true" />
<equals arg1="${@{project-name}.dependenciesUTD}" arg2="true" />
</and>
</not>
<then>
<echo message="Artifact '${@{project-name}.artifact}' is not available or out-of-date, calling 'mvn install'" />
<!--
| Force the target artifact to be re-built by deleting it.
+-->
<delete file="${@{project-name}.artifact}" />
<!--
| Execute the sub-tasks
+-->
<sub-tasks />
</sequential>
</macrodef>
<!--
| Provides a wrapper for tasks that need a classpath that includes the uPortal source
| and all of its dependencies. The task also ensures the uportal-impl JAR exists and
| is up to date.
|
| The following are available in the impl-sub-tasks element:
| pom object - uportal-impl.pom - The Maven POM object for the uportal-impl pom
| property - uportal-impl.artifact - The full path to the uportal-impl JAR
| path - uportal-impl.classpath - The uportal-impl classpath not including the uportal-impl JAR
| path - uportal-impl-full.classpath - The uportal-impl classpath including the uportal-impl JAR
+-->
<macrodef name="uportal-impl-macro">
<element name="impl-sub-tasks" optional="false" implicit="true" />
<maven-artifact-macro project-name="uportal-impl" project-path="${uportal-impl.dir}" checkfilesid="uportal-parent.pom.fsid">
<!--
| Include the uportal-impl JAR in the final classpath
+-->
<path id="uportal-impl-full.classpath">
<path refid="uportal-impl.classpath" />
<pathelement location="${uportal-impl.artifact}" />
</path>
<!--
| Provides a wrapper for tasks that need a classpath that includes all of the uPortal WAR
| dependencies. The task also ensures the uportal-war WAR exists and is up to date.
|
| The following are available in the war-sub-tasks element:
| properties from the uportal-impl-macro macrodef
| pom object - uportal-war.pom - The Maven POM object for the uportal-war pom
| property - uportal-war.artifact - The full path to the uportal-war WAR
| path - uportal-war.classpath - The uportal-war classpath not including the uportal-war WAR
+-->
<macrodef name="uportal-war-macro">
<element name="war-sub-tasks" optional="false" implicit="true" />
<!--
| Provides a wrapper for tasks that depend on the portlet overlays being installed and up-to-date.
|
| No properties are set for the overlay-sub-tasks element.
+-->
<macrodef name="uportal-portlets-overlay-macro">
<element name="overlay-sub-tasks" optional="false" implicit="true" />
<!--
| Iterate over the child projects and run the artifact macro on each of them
+-->
<for param="portlet-overlay-dir">
<path>
<dirset dir="${uportal-portlets-overlay.dir}">
<include name="*"/>
</dirset>
</path>
<sequential>
<if>
<available file="@{portlet-overlay-dir}/pom.xml" />
<then>
<basename file="@{portlet-overlay-dir}" property="@{portlet-overlay-dir}-name" />
<maven-artifact-macro project-name="${@{portlet-overlay-dir}-name}" project-path="@{portlet-overlay-dir}" checkfilesid="uportal-portlets-overlay.pom.fsid" />
</then>
</if>
</sequential>
</for>
<!--
| Provides a wrapper for tasks that need a classpath that includes all of the uPortal EAR
| dependencies. The task also ensures the uportal-ear EAR exists and is up to date.
|
| The following are available in the ear-sub-tasks element:
| properties from the uportal-war-macro macrodef
| pom object - uportal-ear.pom - The Maven POM object for the uportal-ear pom
| property - uportal-ear.artifact - The full path to the uportal-ear EAR
| path - uportal-ear.classpath - The uportal-ear classpath not including the uportal-ear EAR
+-->
<macrodef name="uportal-ear-macro">
<element name="ear-sub-tasks" optional="false" implicit="true" />
<!--
| Provides a wrapper for tasks that need a classpath that includes the uPortal ear deployer
| and all of its dependencies. The task also ensures the uportal-impl JAR exists and
| is up to date.
|
| The following are available in the ear-deployer-sub-tasks element:
| pom object - uportal-ear-deployer.pom - The Maven POM object for the uportal-ear-deployer pom
| property - uportal-ear-deployer.artifact - The full path to the uportal-ear-deployer JAR
| path - uportal-ear-deployer.classpath - The uportal-ear-deployer classpath not including the uportal-ear-deployer JAR
| path - uportal-ear-deployer-full.classpath - The uportal-impl classpath including the uportal-impl JAR
+-->
<macrodef name="uportal-ear-deployer-macro">
<element name="ear-deployer-sub-tasks" optional="false" implicit="true" />
<maven-artifact-macro project-name="uportal-ear-deployer" project-path="${uportal-ear-deployer.dir}" checkfilesid="uportal-parent.pom.fsid">
<!--
| Include the uportal-ear-deployer JAR in the final classpath
+-->
<path id="uportal-ear-deployer-full.classpath">
<path refid="uportal-ear-deployer.classpath" />
<pathelement location="${uportal-ear-deployer.artifact}" />
</path>
<!--
| Provides a wrapper for tasks that need a classpath that includes all of the uPortal WAR
| dependencies. The task also ensures the uportal-war WAR exists and is up to date.
|
| The following are available in the ant-tasks-sub-tasks element:
| properties from the uportal-ear-deployer-macro macrodef
| pom object - uportal-ant-tasks.pom - The Maven POM object for the uportal-ant-tasks pom
| property - uportal-ant-tasks.artifact - The full path to the uportal-ant-tasks JAR
| path - uportal-ant-tasks.classpath - The uportal-ant-tasks classpath not including the uportal-ant-tasks WAR
| path - uportal-ant-tasks-full.classpath - The uportal-ant-tasks classpath including the uportal-ant-tasks JAR
+-->
<macrodef name="uportal-ant-tasks-macro">
<element name="ant-tasks-sub-tasks" optional="false" implicit="true" />
<sequential>
<uportal-ear-deployer-macro>
<fileset id="uportal-ear-deployer-artifacts" file="${uportal-ear-deployer.artifact}" />
<maven-artifact-macro project-name="uportal-ant-tasks" project-path="${uportal-ant-tasks.dir}" checkfilesid="uportal-ear-deployer-artifacts">
<!--
| Include the uportal-ear-deployer JAR in the final classpath
+-->
<path id="uportal-ant-tasks-full.classpath">
<path refid="uportal-ant-tasks.classpath" />
<pathelement location="${uportal-ant-tasks.artifact}" />
</path>
<!--
| Utility target for executing a maven with some number (up to 10) of goals. The
| target should automaticly work on all OSs as long as 'mvn' is on the path.
+-->
<target name="mvn">
<property name="goal" value="" />
<property name="goal1" value="" />
<property name="goal2" value="" />
<property name="goal3" value="" />
<property name="goal4" value="" />
<property name="goal5" value="" />
<property name="goal6" value="" />
<property name="goal7" value="" />
<property name="goal8" value="" />
<property name="goal9" value="" />
#
# Modify this file to suit your environment.
# The values of these properties will
# override the values of properties of the
# same name in the build.xml file.
#
# Use forward slashes for path names even if
# you are in a Windows environment!
#
#-------------------- File and Directory Names ------------------------
##### Replace server.home with the location of Tomcat 6 on your machine #####
# path to tomcat binaries [email protected]@
# path to tomcat servlet container (defaults to same directory as the tomcat binaries)
server.base=${server.home}
# path to webapps directory (defaults to /webapps under the tomcat path)
server.webapps=${server.base}/webapps
# If the mvn executable isn't on your path you can set the location here or set it on your path.
#maven.home=
######## Deployment Configuration ##########
# The following apply to deployPortletApp, deploy-war, and deploy-ear targets
# Should the deployment tools extract the WARs when copying them into the servlet container
extractWars=true
# Should the existing webapp be removed before deploying the new webapp
removeExisting=true
# The following applies to the clean and deploy-ear targets.
# Should the shared library location have all existing files removed when clean is run.
# NOTE: Tomcat 6.0 does not include any libraries in shared/lib by default so as long as
# all required libraries are declared in the uportal-ear it is ok to set this to true.
cleanShared=false
# Prompt the user before running ant tasks that could modify the database
prodPrompt=false