blob: 71fbd7e4270bc031b725b49bc0182253de4a74ff [file] [log] [blame]
<?xml version="1.0" encoding="UTF-8"?>
<!--
/*
* Copyright 2001-2004 The Apache Software Foundation.
*
* Licensed 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.
*/
-->
<!--
| The main goals for multi project build are:
|
| default
| Build all the modules
|
| clean
| Deletes the 'target' directory in all projects
| clean-repo
| Deletes the 'target' directory in all projects
|
| war
| Build the war
|
|
-->
<project default="jar"
xmlns:j="jelly:core"
xmlns:u="jelly:util"
xmlns:deploy="deploy"
xmlns:modules="local:modules"
xmlns:ant="jelly:ant"
xmlns:plugin="plugin"
xmlns:macros="macros"
xmlns:maven="jelly:maven"
xmlns:define="jelly:define">
<j:set var="dist.name" value="${pom.artifactId}-${pom.currentVersion}"/>
<j:set var="dist.dir" value="target/dist"/>
<tstamp>
<format property="release_date" pattern="MMMM d, yyyy" locale="en"/>
</tstamp>
<preGoal name="modules:reactor:init">
<j:set var="groupId" value="maven-itest-plugin"/>
<j:set var="artifactId" value="maven-itest-plugin"/>
<j:set var="version" value="1.0"/>
<attainGoal name="plugin:download-artifact"/>
<maven:installPlugin
file="${maven.repo.local}/${groupId}/plugins/${artifactId}-${version}.jar"
cache="true"/>
</preGoal>
<preGoal name="build:start">
<property name="modules" value="core,common,xml,wsdl,adb,codegen,doom,webapp,addressing"/>
</preGoal>
<!-- ======= -->
<!-- Modules -->
<!-- ======= -->
<goal name="modules:reactor:init">
<!--
| Determine the includes which the reactor will use.
|
| Uses 4 properties to control which modules will be include:
|
| module.types Comma seperated list of module types (ie. specs or modules)
| module.includes Comma seperated list of module names (ie. common, core, ...)
| modules Same as module.includes, module.includes initializes to this value
| module.excludes Comma seperated list of module names to exclude
|
| The end result is that modules.reactor.includes is set to the project.xml files
| to include. This is the value the reactor will use.
|
| Example, to only build the common and core modules:
|
| maven -Dmodules=common,core
-->
<j:if test="${context.getVariable('module.types') == null}">
<j:set var="module.types" value="modules,applications,plugins"/>
</j:if>
<j:if test="${context.getVariable('modules') == null}">
<!-- The default is to build everything -->
<j:set var="modules" value="*"/>
</j:if>
<j:if test="${context.getVariable('module.includes') == null}">
<j:set var="module.includes" value="${modules}"/>
</j:if>
<j:if test="${context.getVariable('module.excludes') == null}">
<j:set var="module.excludes" value=""/>
</j:if>
<u:tokenize var="types" delim=",">${module.types}</u:tokenize>
<ant:fileScanner var="scanner">
<ant:fileset dir="${basedir}">
<j:forEach var="type" items="${types}">
<j:choose>
<j:when test="${context.getVariable('module.includes') == '*'}">
<ant:include name="${type}/*/project.xml"/>
</j:when>
<j:otherwise>
<u:tokenize var="includes" delim=",">${module.includes}</u:tokenize>
<j:forEach var="include" items="${includes}">
<u:available file="${basedir}/${type}/${include}/project.xml">
<ant:include name="${type}/${include}/project.xml"/>
</u:available>
</j:forEach>
</j:otherwise>
</j:choose>
<j:choose>
<j:when test="${context.getVariable('module.excludes') == '*'}">
<ant:exclude name="${type}/*/project.xml"/>
</j:when>
<j:otherwise>
<u:tokenize var="excludes" delim=",">${module.excludes}</u:tokenize>
<j:forEach var="exclude" items="${excludes}">
<u:available file="${basedir}/${type}/${exclude}/project.xml">
<ant:exclude name="${type}/${exclude}/project.xml"/>
</u:available>
</j:forEach>
</j:otherwise>
</j:choose>
</j:forEach>
</ant:fileset>
</ant:fileScanner>
<!-- Setup the includes which will be used by the reactor -->
<j:forEach var="file" items="${scanner.iterator()}">
<!--
| Would be nice if reactor would take a file set, but for now just remove
| the baseddir portion of the file's name. So this will essentially strip off
| ${basedir}
-->
<j:set var="directory"
value="${file.parentFile.parentFile.name}/${file.parentFile.name}"/>
<j:set var="filename" value="${directory}/${file.name}"/>
<j:choose>
<j:when test="${context.getVariable('modules.reactor.includes') == null}">
<j:set var="modules.directories" value="${directory}"/>
<j:set var="modules.reactor.includes" value="${filename}"/>
</j:when>
<j:otherwise>
<j:set var="modules.directories" value="${modules.directories},${directory}"/>
<j:set var="modules.reactor.includes"
value="${modules.reactor.includes},${filename}"/>
</j:otherwise>
</j:choose>
</j:forEach>
</goal>
<!-- Helper tags for modules -->
<define:taglib uri="local:modules">
<define:tag name="reactor">
<attainGoal name="modules:reactor:init"/>
<j:choose>
<j:when test="${goals != null}">
<maven:reactor
basedir="${basedir}"
includes="${modules.reactor.includes}"
banner="Executing (${goals}):"
ignoreFailures="false"
goals="${goals}"
postProcessing="true"
/>
</j:when>
<j:when test="${goals == null}">
<maven:reactor
basedir="${basedir}"
includes="${modules.reactor.includes}"
banner="Executing (${goals}):"
ignoreFailures="false"
postProcessing="true"
/>
</j:when>
</j:choose>
<!-- Set reactor projects in parent scope so goals have access to it -->
<j:set var="reactorProjects" value="${reactorProjects}" scope="parent"/>
</define:tag>
</define:taglib>
<goal name="m:init">
<ant:fileScanner var="scanner">
<ant:fileset dir="${basedir}">
<u:tokenize var="includes" delim=",">${maven.multiproject.includes}</u:tokenize>
<j:forEach var="include" items="${includes}">
<ant:include name="${include}"/>
</j:forEach>
<u:tokenize var="excludes" delim=",">${maven.multiproject.excludes}</u:tokenize>
<j:forEach var="exclude" items="${excludes}">
<ant:exclude name="${exclude}"/>
</j:forEach>
</ant:fileset>
</ant:fileScanner>
<j:set var="maven.multiproject.includes" value=""/>
<j:set var="maven.multiproject.excludes" value=""/>
<j:set var="modules.directories" value=""/>
<u:tokenize var="moduleList" delim=",">${modules}</u:tokenize>
<j:set var="currentDir" value="${basedir}/"/>
<j:forEach var="file" items="${scanner.iterator()}">
<j:set var="directory" value="${file.parentFile.absolutePath}"/>
<j:set var="include" value="${file.absolutePath.substring(currentDir.length())}"/>
<j:if test="${moduleList.isEmpty() || moduleList.contains(file.parentFile.name)}">
<j:choose>
<j:when test="${context.getVariable('maven.multiproject.includes') == ''}">
<j:set var="modules.directories" value="${directory}"/>
<j:set var="maven.multiproject.includes" value="${include}"/>
</j:when>
<j:otherwise>
<j:set var="modules.directories"
value="${modules.directories},${directory}"/>
<j:set var="maven.multiproject.includes"
value="${maven.multiproject.includes},${include}"/>
</j:otherwise>
</j:choose>
</j:if>
</j:forEach>
</goal>
<goal name="jar:jar">
<attainGoal name="create-jar"/>
<ant:copy file="target/lib/axis2-${pom.currentVersion}.jar"
toDir="target/"/>
</goal>
<goal name="jar">
<attainGoal name="multiproject:install"/>
<attainGoal name="jar:install"/>
</goal>
<goal name="init">
<ant:mkdir dir="target"/>
<ant:mkdir dir="${dist.dir}"/>
<ant:mkdir dir="target/lib"/>
<uptodate property="jars.uptodate" targetfile="target/axis2-${pom.currentVersion}.war">
<srcfiles dir="modules">
<include name="**/*.java"/>
<include name="**/*.xml"/>
<include name="**/*.wsdl"/>
<exclude name="**/target/**"/>
</srcfiles>
</uptodate>
<echo message="the files are up to date = ${jars.uptodate}"></echo>
</goal>
<goal name="modules:clean">
<attainGoal name="modules:reactor:init"/>
<u:tokenize var="directories" delim=",">${modules.directories}</u:tokenize>
<j:forEach var="directory" items="${directories}">
<ant:echo>+----------------------------------------</ant:echo>
<ant:echo>| Cleaning: ${directory}</ant:echo>
<ant:echo>+----------------------------------------</ant:echo>
<ant:delete dir="${directory}/target"/>
<ant:delete quiet="false" failonerror="false">
<ant:fileset dir="${directory}">
<ant:include name="maven.log"/>
<ant:include name="velocity.log*"/>
<ant:include name="junit*.properties"/>
<ant:include name="axis.log"/>
<ant:include name="junit*.properties"/>
<ant:include name="temp.properties"/>
</ant:fileset>
</ant:delete>
<ant:echo></ant:echo>
</j:forEach>
<ant:echo>+----------------------------------------</ant:echo>
<ant:echo>| Cleaning: target and etc/target</ant:echo>
<ant:echo>+----------------------------------------</ant:echo>
<ant:delete dir="target"/>
<ant:delete dir="etc/target"/>
</goal>
<goal name="clean">
<ant:delete dir="${user.home}/.axis2"/>
<ant:delete dir="${user.home}/.axis2home"/>
<attainGoal name="modules:clean"/>
<attainGoal name="clean-repo"/>
</goal>
<!-- ================================================================ -->
<!--- Clean the Repository -->
<!-- ================================================================ -->
<goal name="clean-repo">
<ant:delete>
<ant:fileset dir="${maven.repo.local}">
<ant:include name="axis/jars/axis2*.jar"/>
</ant:fileset>
</ant:delete>
</goal>
<goal name="all-tests">
<modules:reactor goals="jar:install,test,itest"/>
</goal>
<goal name="cleanse-sources">
<modules:reactor goals="cleanse-sources"/>
</goal>
<goal name="clover">
<modules:reactor goals="clover:on,jar:install,test"/>
<attainGoal name="clover:merge"/>
<attainGoal name="clover:report"/>
</goal>
<goal name="create-jar" prereqs="init">
<jar destfile="target/lib/axis2-${pom.currentVersion}.jar">
<fileset dir="modules/core/target/classes"/>
<!-- adding the tool classes. This is needed to get the ant task -->
<!--<fileset dir="modules/tool/target/classes"/>-->
<fileset dir="modules/common/target/classes"/>
<fileset dir="modules/xml/target/classes"/>
<fileset dir="modules/wsdl/target/classes"/>
<fileset dir="modules/adb/target/classes"/>
<fileset dir="modules/codegen/target/classes"/>
<fileset dir="modules/doom/target/classes"/>
<fileset dir="modules/addressing/target/classes"/>
<fileset dir="modules/addressing/target/">
<include name="modules/addressing.mar"/>
</fileset>
</jar>
</goal>
<goal name="create-lib">
<macros:copy-deps copyToDir="${target/lib}"/>
</goal>
<!-- ================================================================ -->
<!--- Create the War -->
<!-- ================================================================ -->
<goal name="war" prereqs="init, jar">
<ant:mkdir dir="target/temp/war/lib"/>
<ant:mkdir dir="target/temp/war/toWEB-INF/modules"/>
<ant:mkdir dir="target/temp/war/toWEB-INF/services"/>
<!-- Copy the 3rd party libs, relevant to minimal bin distro -->
<macros:copy-deps copyToDir="target/temp/war/lib"
modules="core,common,xml,wsdl,adb"/>
<!-- Create axis2-core.jar -->
<jar destfile="target/temp/war/lib/axis2-core-${pom.currentVersion}.jar">
<fileset dir="modules/core/target/classes/"/>
<fileset dir="modules/common/target/classes/"/>
<fileset dir="modules/xml/target/classes/"/>
<fileset dir="modules/wsdl/target/classes/"/>
</jar>
<!-- Copy the adb jar -->
<ant:copy toDir="target/temp/war/lib">
<ant:fileset file="modules/adb/target/axis2-adb-${pom.currentVersion}.jar"/>
</ant:copy>
<!-- copy the addressing mar -->
<ant:copy toDir="target/temp/war/toWEB-INF/modules">
<ant:fileset file="modules/addressing/target/addressing.mar"/>
</ant:copy>
<!-- copy the sample services -->
<ant:copy toDir="target/temp/war/toWEB-INF/services">
<ant:fileset file="modules/samples/target/toWar/services/version.aar"/>
</ant:copy>
<ant:war destfile="target/dist/axis2.war"
webxml="modules/webapp/conf/web.xml">
<ant:fileset dir="modules/webapp"/>
<ant:lib dir="target/temp/war/lib">
<ant:include name="**"/>
<ant:exclude name="**servlet**"/>
<ant:exclude name="ant*.jar"/>
</ant:lib>
<ant:classes dir="modules/core/conf">
<ant:include name="*.properties"/>
</ant:classes>
<ant:webinf dir="modules/core/src/org/apache/axis2/deployment">
<ant:include name="*.xml"/>
</ant:webinf>
<ant:webinf dir="target/temp/war/toWEB-INF"/>
</ant:war>
</goal>
<!-- to transforme htmls to xdocs -->
<preGoal name="xdoc:jelly-transform">
<attainGoal name="html2xdoc"/>
</preGoal>
<!-- ================================================================ -->
<!--- Create the Java Docs -->
<!-- ================================================================ -->
<goal name="javadocs" prereqs="init, create-lib">
<ant:javadoc packagenames="org.apache.axis2.*"
defaultexcludes="yes"
destdir="target/apidocs"
author="true"
version="true"
use="true"
windowtitle="Axis2 API">
<ant:sourcepath>
<ant:pathelement location="modules/adb/src"/>
<ant:pathelement location="modules/addressing/src"/>
<ant:pathelement location="modules/codegen/src"/>
<ant:pathelement location="modules/core/src"/>
<ant:pathelement location="modules/doom/src"/>
<ant:pathelement location="modules/tool/src"/>
<ant:pathelement location="modules/wsdl/src"/>
<ant:pathelement location="modules/xml/src"/>
</ant:sourcepath>
<ant:classpath>
<ant:fileset dir="target/lib">
<ant:include name="**/*.jar"/>
</ant:fileset>
</ant:classpath>
<ant:excludepackage name="org.apache.axis2.tool.codegen.*"/>
<ant:excludepackage name="org.apache.axis2.tool.service.*"/>
</ant:javadoc>
</goal>
<!-- ================================================================ -->
<!--- Reports -->
<!-- ================================================================ -->
<!-- Conditionally disable linkcheck based on a property. -->
<postGoal name="xdoc:register-reports">
<j:if test="${maven.allreports.disable}">
<echo>Reports are disabled. Deregistering all the reports ....</echo>
<attainGoal name="maven-linkcheck-plugin:deregister"/>
<echo>linkcheck is disabled.</echo>
<attainGoal name="maven-checkstyle-plugin:deregister"/>
<echo>checkstyle is disabled.</echo>
<attainGoal name="maven-changes-plugin:deregister"/>
<echo>changes is disabled.</echo>
<attainGoal name="maven-changelog-plugin:deregister"/>
<echo>changelog is disabled.</echo>
<attainGoal name="maven-license-plugin:deregister"/>
<echo>license is disabled.</echo>
<attainGoal name="maven-javadoc-plugin:deregister"/>
<echo>javadoc is disabled.</echo>
<attainGoal name="maven-junit-report-plugin:deregister"/>
<echo>junit-report is disabled.</echo>
<attainGoal name="maven-tasklist-plugin:deregister"/>
<echo>tasklist is disabled.</echo>
</j:if>
</postGoal>
<!-- ================================================================ -->
<!--- Create the Release -->
<!-- ================================================================ -->
<goal name="init-dist">
<ant:filter token="axis2_version" value="${pom.currentVersion}"/>
<ant:filter token="release_date" value="${release_date}"/>
<property name="min_dep_cache" value="target/temp/cache/min"/>
<property name="std_dep_cache" value="target/temp/cache/std"/>
<property name="war_dep_cache" value="target/temp/cache/war"/>
<ant:mkdir dir="target/dist"/>
</goal>
<goal name="dist-bin" prereqs="jar,init-dist,cache-std-deps">
<ant:echo>+----------------------------------------------</ant:echo>
<ant:echo>| Creating: Axis2 Standard Binary Distribution</ant:echo>
<ant:echo>+----------------------------------------------</ant:echo>
<ant:property name="std.bin.temp.dir" value="target/temp/std/bin"/>
<ant:mkdir dir="${std.bin.temp.dir}/lib"/>
<ant:mkdir dir="${std.bin.temp.dir}/bin"/>
<ant:mkdir dir="${std.bin.temp.dir}/modules"/>
<ant:mkdir dir="${std.bin.temp.dir}/samples"/>
<!-- Copy bin scripts -->
<ant:copy todir="${std.bin.temp.dir}/bin">
<ant:fileset dir="bin"/>
</ant:copy>
<!-- Copy the 3rd party libs -->
<ant:copy toDir="${std.bin.temp.dir}/lib">
<ant:fileset dir="${min_dep_cache}"/>
<ant:fileset dir="${std_dep_cache}"/>
</ant:copy>
<!-- Delete tesing jars -->
<echo message="Deleting Unwanted testing jars"/>
<ant:delete>
<fileset dir="${std.bin.temp.dir}/lib">
<include name="**/ant*.jar"/>
<include name="**/xmlunit*.jar"/>
<include name="**/junit*.jar"/>
</fileset>
</ant:delete>
<!-- Create axis2-core.jar -->
<jar destfile="${std.bin.temp.dir}/lib/axis2-core-${pom.currentVersion}.jar">
<fileset dir="modules/core/target/classes/"/>
<fileset dir="modules/common/target/classes/"/>
<fileset dir="modules/xml/target/classes/"/>
<fileset dir="modules/wsdl/target/classes/"/>
</jar>
<ant:copy toDir="${std.bin.temp.dir}/lib">
<ant:fileset file="modules/adb/target/axis2-adb-${pom.currentVersion}.jar"/>
<ant:fileset file="modules/codegen/target/axis2-codegen-${pom.currentVersion}.jar"/>
<ant:fileset file="modules/doom/target/axis2-doom-${pom.currentVersion}.jar"/>
</ant:copy>
<!-- Copy addressing mar -->
<ant:copy toDir="${std.bin.temp.dir}/modules">
<ant:fileset file="modules/addressing/target/addressing.mar"/>
</ant:copy>
<!-- Copy the samples -->
<ant:copy todir="${std.bin.temp.dir}/samples">
<ant:fileset dir="modules/samples/target/samples"/>
</ant:copy>
<ant:copy todir="${std.bin.temp.dir}/samples/userguide">
<ant:fileset file="${std.bin.temp.dir}/samples/groovyService.aar"/>
</ant:copy>
<ant:delete file="${std.bin.temp.dir}/samples/groovyService.aar"/>
<ant:zip file="${dist.dir}/axis2-std-${pom.currentVersion}-bin.zip"
basedir="${std.bin.temp.dir}"/>
<ant:delete dir="${std.bin.temp.dir}"/>
</goal>
<goal name="cache-min-deps" prereqs="init-dist">
<ant:mkdir dir="${min_dep_cache}"/>
<j:if test="${minDeps.uptodate != 'yes'}">
<macros:copy-deps copyToDir="${min_dep_cache}"
mods="core,common,xml,wsdl,adb"/>
<property name="minDeps.uptodate" value="yes"/>
</j:if>
</goal>
<goal name="cache-std-deps" prereqs="init-dist,cache-min-deps">
<ant:mkdir dir="${std_dep_cache}"/>
<j:if test="${stdDeps.uptodate != 'yes'}">
<macros:copy-deps copyToDir="${std_dep_cache}"
mods="codegen,doom"/>
<property name="stdDeps.uptodate" value="yes"/>
</j:if>
</goal>
<!-- ================================================================ -->
<!--- Create JUnit test reports -->
<!-- ================================================================ -->
<goal name="test-reports">
<mkdir dir="${basedir}/target/test-reports"/>
<ant:junitreport todir="${basedir}/target/test-reports">
<ant:fileset dir="${basedir}/">
<ant:include name="**/test-reports/TEST-*.xml"/>
<ant:include name="**/itest-reports/TEST-*.xml"/>
</ant:fileset>
<ant:report format="frames" todir="${basedir}/target/test-reports"
styledir="${basedir}/etc"/>
</ant:junitreport>
</goal>
<define:taglib uri="macros">
<define:tag name="copy-deps">
<ant:echo message="######## MODULES=${mods}"/>
<ant:echo message="######## Copy2Dir=${copyToDir}"/>
<j:set var="modules" value="${mods}"/>
<!-- ######################### REACTOR INIT ##########################################-->
<j:if test="${context.getVariable('module.types') == null}">
<j:set var="module.types" value="modules,applications,plugins"/>
</j:if>
<j:set var="module.includes" value="${modules}"/>
<j:if test="${context.getVariable('module.excludes') == null}">
<j:set var="module.excludes" value=""/>
</j:if>
<u:tokenize var="types" delim=",">${module.types}</u:tokenize>
<ant:fileScanner var="scanner">
<ant:fileset dir="${basedir}">
<j:forEach var="type" items="${types}">
<j:choose>
<j:when test="${context.getVariable('module.includes') == '*'}">
<ant:include name="${type}/*/project.xml"/>
</j:when>
<j:otherwise>
<u:tokenize var="includes" delim=",">${module.includes}</u:tokenize>
<j:forEach var="include" items="${includes}">
<u:available file="${basedir}/${type}/${include}/project.xml">
<ant:include name="${type}/${include}/project.xml"/>
</u:available>
</j:forEach>
</j:otherwise>
</j:choose>
<j:choose>
<j:when test="${context.getVariable('module.excludes') == '*'}">
<ant:exclude name="${type}/*/project.xml"/>
</j:when>
<j:otherwise>
<u:tokenize var="excludes" delim=",">${module.excludes}</u:tokenize>
<j:forEach var="exclude" items="${excludes}">
<u:available file="${basedir}/${type}/${exclude}/project.xml">
<ant:exclude name="${type}/${exclude}/project.xml"/>
</u:available>
</j:forEach>
</j:otherwise>
</j:choose>
</j:forEach>
</ant:fileset>
</ant:fileScanner>
<j:set var="modules.reactor.includes" value=""/>
<!-- Setup the includes which will be used by the reactor -->
<j:forEach var="file" items="${scanner.iterator()}">
<j:set var="directory"
value="${file.parentFile.parentFile.name}/${file.parentFile.name}"/>
<j:set var="filename" value="${directory}/${file.name}"/>
<j:choose>
<j:when test="${context.getVariable('modules.reactor.includes') == null}">
<j:set var="modules.directories" value="${directory}"/>
<j:set var="modules.reactor.includes" value="${filename}"/>
</j:when>
<j:otherwise>
<j:set var="modules.directories"
value="${modules.directories},${directory}"/>
<j:set var="modules.reactor.includes"
value="${modules.reactor.includes},${filename}"/>
</j:otherwise>
</j:choose>
</j:forEach>
<!-- #################### END OF REACTOR INIT #######################################-->
<ant:echo message="Fetching Dependencies for modules: ${modules.reactor.includes}"/>
<maven:reactor
basedir="${basedir}"
postProcessing="true"
includes="${modules.reactor.includes}"
banner="Executing (${goals}):"
ignoreFailures="false"/>
<j:forEach var="x" items="${reactorProjects}">
<ant:echo message="Copying ${x} to ${copyToDir}"/>
<deploy:copy-deps todir="${copyToDir}"
projectDescriptor="${x.getFile()}"/>
</j:forEach>
<property name="modules" value="*"/>
</define:tag>
<define:tag name="copy-release-docs">
<ant:copy toFile="${toDir}/README.txt" filtering="on">
<ant:fileset file="${readmeFile}"/>
</ant:copy>
<ant:copy toFile="${toDir}/release-notes.html" filtering="on">
<ant:fileset file="release-notes.html"/>
</ant:copy>
<ant:copy toFile="${toDir}/LICENSE.txt" filtering="on">
<ant:fileset file="LICENSE.txt"/>
</ant:copy>
</define:tag>
</define:taglib>
</project>