maven-plugins/ant/plugin.jelly

379 lines
11 KiB
XML

<?xml version="1.0"?>
<project
xmlns:j="jelly:core"
xmlns:u="jelly:util"
xmlns:x="jelly:xml">
<!-- ================================================================== -->
<!-- A N T B U I L D G E N E R A T O R -->
<!-- ================================================================== -->
<!-- This plugin generates a stand alone ant build.xml file that can be -->
<!-- used without having Maven installed. The dependencies are -->
<!-- retrieved using the ant <get> task and then the standard <javac> -->
<!-- and <jar> tasks are used to produce a JAR. This is primarily for -->
<!-- people who want to build from sources but don't want to use Maven. -->
<!-- ================================================================== -->
<goal name="ant"
description="Generate an Ant build file"
prereqs="ant:generate-build"/>
<goal
name="ant:generate-build"
description="Generate an Ant build file">
<tstamp />
<!-- get first repo in the list -->
<u:tokenize var="repos" delim=",">${maven.repo.remote}</u:tokenize>
<j:set var="repo">${repos[0]}</j:set>
<j:file name="${maven.ant.generatebuild.file}" prettyPrint="true">
<j:whitespace xmlns="dummy">
<x:comment>
build.xml generated by maven from project.xml version ${pom.currentVersion}
on date ${TODAY}, time ${TSTAMP}
</x:comment>
<project name="${pom.artifactId}" default="jar" basedir=".">
<property name="defaulttargetdir" value="target"/>
<property name="libdir" value="target/lib" />
<property name="classesdir" value="target/classes"/>
<property name="testclassesdir" value="target/test-classes"/>
<property name="testreportdir" value="target/test-reports"/>
<property name="distdir" value="dist"/>
<property name="javadocdir" value="dist/docs/api"/>
<property name="final.name" value="${maven.final.name}"/>
<target
name="init"
description="o Initializes some properties">
<mkdir dir="$${libdir}"/>
<condition property="noget">
<equals arg1="$${build.sysclasspath}" arg2="only"/>
</condition>
</target>
<target
name="compile"
depends="get-deps"
description="o Compile the code">
<mkdir dir="$${classesdir}"/>
<javac
destdir="$${classesdir}"
excludes="**/package.html"
debug="true"
deprecation="true"
optimize="false">
<src>
<pathelement location="${pom.build.sourceDirectory}"/>
</src>
<classpath>
<fileset dir="$${libdir}">
<include name="*.jar"/>
</fileset>
</classpath>
</javac>
<!-- Copy any resources that must be present in the deployed
JAR file.
-->
<j:forEach var="resource" items="${pom.build.resources}">
<copy todir="$${classesdir}">
<j:set var="dir" value="${resource.directory}"/>
<j:if test="${empty dir}">
<j:set var="dir" value="."/>
</j:if>
<fileset dir="${dir}">
<j:forEach var="res" items="${resource.includes}">
<include name="${res}"/>
</j:forEach>
<j:forEach var="res" items="${resource.excludes}">
<exclude name="${res}"/>
</j:forEach>
</fileset>
</copy>
</j:forEach>
<!-- Copy any resources required for unit testing -->
<j:forEach var="resource" items="${pom.build.unitTest.resources}">
<copy todir="$${testclassesdir}">
<j:set var="dir" value="${resource.directory}"/>
<j:if test="${empty dir}">
<j:set var="dir" value="."/>
</j:if>
<fileset dir="${dir}">
<j:forEach var="pattern" items="${resource.includes}">
<include name="${pattern}"/>
</j:forEach>
<j:forEach var="pattern" items="${resource.excludes}">
<exclude name="${pattern}"/>
</j:forEach>
</fileset>
</copy>
</j:forEach>
</target>
<target
name="jar"
depends="compile,test"
description="o Create the jar">
<jar
jarfile="target/$${final.name}.jar"
basedir="$${classesdir}"
excludes="**/package.html"
/>
</target>
<target
name="clean"
description="o Clean up the generated directories">
<delete dir="$${defaulttargetdir}"/>
<delete dir="$${distdir}"/>
</target>
<target
name="dist"
depends="jar, javadoc"
description="o Create a distribution">
<mkdir dir="dist"/>
<copy todir="dist">
<fileset dir="$${defaulttargetdir}" includes="*.jar"/>
<fileset dir="$${basedir}" includes="LICENSE*, README*"/>
</copy>
</target>
<target
name="test"
depends="internal-test"
if="test.failure"
description="o Run the test cases">
<fail message="There were test failures."/>
</target>
<target
name="internal-test"
depends="compile-tests">
<j:if test="${unitTestSourcesPresent}">
<mkdir dir="$${testreportdir}"/>
<junit printSummary="yes"
haltonerror="true"
failureproperty="test.failure"
fork="true"
dir="./">
<!--
I think the following is wrong
<sysproperty key="basedir" value="${pom.build.unitTestSourceDirectory}"/>
<sysproperty key="basedir" value="${basedir}"/> // this gives a full path
including the C:\ on windows
-->
<sysproperty key="basedir" value="."/>
<formatter type="xml"/>
<formatter type="plain" usefile="false"/>
<classpath>
<fileset dir="$${libdir}">
<include name="*.jar"/>
</fileset>
<pathelement path="$${testclassesdir}"/>
<pathelement path="$${classesdir}"/>
</classpath>
<batchtest todir="$${testreportdir}">
<fileset dir="${pom.build.unitTestSourceDirectory}">
<j:forEach var="pat" items="${pom.build.unitTest.includes}">
<include name="${pat}"/>
</j:forEach>
<j:forEach var="pat" items="${pom.build.unitTest.excludes}">
<exclude name="${pat}"/>
</j:forEach>
<!-- add extra excludes if the property is set -->
<j:if test="${context.getVariable('maven.ant.excludeTests') != null}">
<u:tokenize var="patterns" delim=",">${maven.ant.excludeTests}</u:tokenize>
<j:forEach var="pattern" items="${patterns}">
<exclude name="${pattern}" />
</j:forEach>
</j:if>
</fileset>
</batchtest>
</junit>
</j:if>
</target>
<target
name="compile-tests"
depends="compile">
<j:if test="${unitTestSourcesPresent}">
<mkdir dir="$${testclassesdir}"/>
<javac
destdir="$${testclassesdir}"
excludes="**/package.html"
debug="true"
deprecation="true"
optimize="false">
<src>
<pathelement location="${pom.build.unitTestSourceDirectory}"/>
</src>
<classpath>
<fileset dir="$${libdir}">
<include name="*.jar"/>
</fileset>
<pathelement path="$${classesdir}"/>
</classpath>
</javac>
<j:choose trim="true">
<j:when test="${!pom.build.unitTest.resources.includes.isEmpty()}">
<j:set var="maven.has.test.resource.patterns" value="true"/>
</j:when>
<j:when test="${!pom.build.unitTest.resources.excludes.isEmpty()}">
<j:set var="maven.has.test.resource.patterns" value="true"/>
</j:when>
</j:choose>
<j:if test="${maven.has.test.resource.patterns}">
<copy todir="$${testclassesdir}">
<fileset dir="${pom.build.unitTestSourceDirectory}">
<j:forEach var="res" items="${pom.build.unitTest.resources.includes}">
<include name="${res}"/>
</j:forEach>
<j:forEach var="res" items="${pom.build.unitTest.resources.excludes}">
<exclude name="${res}"/>
</j:forEach>
</fileset>
</copy>
</j:if>
</j:if>
</target>
<target
name="javadoc"
depends="jar"
description="o Generate javadoc">
<mkdir dir="$${javadocdir}"/>
<!-- Get the year to display in the Javadocs -->
<tstamp>
<format property="year" pattern="${pom.inceptionYear}-yyyy"/>
</tstamp>
<property
name="copyright"
value="Copyright &amp;copy; ${year} ${pom.organization.name}. All Rights Reserved."
/>
<property
name="title"
value="${pom.name} ${pom.currentVersion} API"
/>
<javadoc
sourcepath="${pom.build.sourceDirectory}"
packagenames="${pom.package}.*"
destdir="$${javadocdir}"
author="true"
private="true"
version="true"
use="true"
windowtitle="${title}"
doctitle="${title}"
bottom="${copyright}">
<classpath>
<fileset dir="$${libdir}">
<include name="*.jar"/>
</fileset>
<pathelement location="target/$${final.name}.jar"/>
</classpath>
</javadoc>
</target>
<target
name="get-deps"
depends="init"
unless="noget">
<j:forEach var="dep" items="${pom.dependencies}">
<get
src="${repo}/${dep.artifactDirectory}/jars/${dep.artifact}"
dest="$${libdir}/${dep.artifact}"
usetimestamp="true"
ignoreerrors="true"
/></j:forEach>
<!-- force junit for tests -->
<get
src="${repo}/junit/jars/junit-3.8.1.jar"
dest="$${libdir}/junit-3.8.1.jar"
usetimestamp="true"
ignoreerrors="true"/>
<get
src="${repo}/ant/jars/ant-1.5.jar"
dest="$${libdir}/ant-1.5.jar"
usetimestamp="true"
ignoreerrors="true"/>
<get
src="${repo}/ant/jars/ant-optional-1.5.jar"
dest="$${libdir}/ant-optional-1.5.jar"
usetimestamp="true"
ignoreerrors="true"/>
</target>
<!-- ================================================================== -->
<!-- A N T A U T O I N S T A L L E R -->
<!-- ================================================================== -->
<!-- For users that have Ant installed Maven can be automatically -->
<!-- installed by answering a few simple questions. We only need to -->
<!-- know what the user wants for ${maven.home} and ${maven.repo.local} -->
<!-- and we're set. -->
<!-- ================================================================== -->
<target
name="install-maven">
<!--
Ask the user what they would like to use for
${maven.home}
${maven.repo.local}
-->
<get
src="$${repo}/maven/maven-install-latest.jar"
dest="$${user.home}/maven-install-latest.jar"
usetimestamp="true"
/>
<unjar
src="$${user.home}/maven-install-latest.jar"
dest="$${maven.home}"
/>
</target>
</project>
</j:whitespace>
</j:file>
</goal>
</project>