maven-plugins/javadoc/plugin.jelly
aheritier 372355f779 - Add the property maven.javadoc.debug
- MPJAVADOC-28 partially fixed : @link tag not working with package names.
- MPJAVADOC-29 partially fixed : Packages list broken on jdk 1.3 for multiple packages.


git-svn-id: https://svn.apache.org/repos/asf/maven/maven-1/plugins/trunk@115589 13f79535-47bb-0310-9956-ffa450edef68
2004-06-28 23:14:24 +00:00

555 lines
24 KiB
XML

<?xml version="1.0"?>
<!--
/*
* 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.
*/
-->
<project
xmlns:ant="jelly:ant"
xmlns:define="jelly:define"
xmlns:doc="doc"
xmlns:j="jelly:core"
xmlns:util="jelly:util"
xmlns:artifact="artifact"
xmlns:javadoc="javadoc"
xmlns:maven="jelly:maven"
>
<!-- ================================================================== -->
<!-- Initialize plugin -->
<!-- ================================================================== -->
<goal name="javadoc:init" prereqs="xdoc:init">
<!-- javadoc plugin properties -->
<maven:get var="maven.javadoc.additionalparam" plugin="maven-javadoc-plugin" property="maven.javadoc.additionalparam"/>
<maven:get var="maven.javadoc.author" plugin="maven-javadoc-plugin" property="maven.javadoc.author"/>
<maven:get var="maven.javadoc.customtags" plugin="maven-javadoc-plugin" property="maven.javadoc.customtags"/>
<maven:get var="maven.javadoc.debug" plugin="maven-javadoc-plugin" property="maven.javadoc.debug"/>
<maven:get var="maven.javadoc.destdir" plugin="maven-javadoc-plugin" property="maven.javadoc.destdir"/>
<maven:get var="maven.javadoc.doclet" plugin="maven-javadoc-plugin" property="maven.javadoc.doclet"/>
<maven:get var="maven.javadoc.docletpath" plugin="maven-javadoc-plugin" property="maven.javadoc.docletpath"/>
<maven:get var="maven.javadoc.links" plugin="maven-javadoc-plugin" property="maven.javadoc.links"/>
<maven:get var="maven.javadoc.locale" plugin="maven-javadoc-plugin" property="maven.javadoc.locale"/>
<maven:get var="maven.javadoc.maxmemory" plugin="maven-javadoc-plugin" property="maven.javadoc.maxmemory"/>
<maven:get var="maven.javadoc.mode.online" plugin="maven-javadoc-plugin" property="maven.javadoc.mode.online"/>
<maven:get var="maven.javadoc.offlineLinks" plugin="maven-javadoc-plugin" property="maven.javadoc.offlineLinks"/>
<maven:get var="maven.javadoc.overview" plugin="maven-javadoc-plugin" property="maven.javadoc.overview"/>
<maven:get var="maven.javadoc.package" plugin="maven-javadoc-plugin" property="maven.javadoc.package"/>
<maven:get var="maven.javadoc.private" plugin="maven-javadoc-plugin" property="maven.javadoc.private"/>
<maven:get var="maven.javadoc.public" plugin="maven-javadoc-plugin" property="maven.javadoc.public"/>
<maven:get var="maven.javadoc.source" plugin="maven-javadoc-plugin" property="maven.javadoc.source"/>
<maven:get var="maven.javadoc.stylesheet" plugin="maven-javadoc-plugin" property="maven.javadoc.stylesheet"/>
<maven:get var="maven.javadoc.tagletpath" plugin="maven-javadoc-plugin" property="maven.javadoc.tagletpath"/>
<maven:get var="maven.javadoc.taglets" plugin="maven-javadoc-plugin" property="maven.javadoc.taglets"/>
<maven:get var="maven.javadoc.use" plugin="maven-javadoc-plugin" property="maven.javadoc.use"/>
<maven:get var="maven.javadoc.useexternalfile" plugin="maven-javadoc-plugin" property="maven.javadoc.useexternalfile"/>
<maven:get var="maven.javadoc.version" plugin="maven-javadoc-plugin" property="maven.javadoc.version"/>
<maven:get var="maven.javadoc.windowtitle" plugin="maven-javadoc-plugin" property="maven.javadoc.windowtitle"/>
<!-- internal variables -->
<j:set var="internal.javadoc.jar" value="${maven.build.dir}/${maven.final.name}_javadoc.jar"/>
<j:set var="internal.javadoc.needed" value="null"/>
<j:set var="internal.javadoc.src.modifs" value="false"/>
<j:set var="internal.javadoc.src.set" value="${context.getAntProject().getReferences().get('maven.compile.src.set')}"/>
<j:set var="internal.javadoc.working.dir" value="${maven.build.dir}/javadoc"/>
<j:if test="${maven.javadoc.debug}">
<ant:echo>
### Debug mode is on ###
==================================
=== javadoc plugin properties ===
==================================
maven.javadoc.additionalparam = [${maven.javadoc.additionalparam}]
maven.javadoc.author = [${maven.javadoc.author}]
maven.javadoc.customtags = [${maven.javadoc.customtags}]
maven.javadoc.debug = [${maven.javadoc.debug}]
maven.javadoc.destdir = [${maven.javadoc.destdir}]
maven.javadoc.doclet = [${maven.javadoc.doclet}]
maven.javadoc.docletpath = [${maven.javadoc.docletpath}]
maven.javadoc.links = [${maven.javadoc.links}]
maven.javadoc.locale = [${maven.javadoc.locale}]
maven.javadoc.maxmemory = [${maven.javadoc.maxmemory}]
maven.javadoc.mode.online = [${maven.javadoc.mode.online}]
maven.javadoc.offlineLinks = [${maven.javadoc.offlineLinks}]
maven.javadoc.overview = [${maven.javadoc.overview}]
maven.javadoc.package = [${maven.javadoc.package}]
maven.javadoc.private = [${maven.javadoc.private}]
maven.javadoc.public = [${maven.javadoc.public}]
maven.javadoc.source = [${maven.javadoc.source}]
maven.javadoc.stylesheet = [${maven.javadoc.stylesheet}]
maven.javadoc.tagletpath = [${maven.javadoc.tagletpath}]
maven.javadoc.taglets = [${maven.javadoc.taglets}]
maven.javadoc.use = [${maven.javadoc.use}]
maven.javadoc.useexternalfile = [${maven.javadoc.useexternalfile}]
maven.javadoc.version = [${maven.javadoc.version}]
maven.javadoc.windowtitle = [${maven.javadoc.windowtitle}]
==================================
=== javadoc internal variables ===
==================================
internal.javadoc.jar = [${internal.javadoc.jar}]
internal.javadoc.needed = [${internal.javadoc.needed}]
internal.javadoc.src.modifs = [${internal.javadoc.src.modifs}]
internal.javadoc.src.set = [${internal.javadoc.src.set}]
internal.javadoc.working.dir = [${internal.javadoc.working.dir}]
</ant:echo>
</j:if>
<j:if test="not ${maven.javadoc.debug}">
<ant:echo>
### Debug mode is off ###
</ant:echo>
</j:if>
</goal>
<!-- ================================================================== -->
<!-- Test if we need to call javadoc -->
<!-- ================================================================== -->
<define:taglib uri="javadoc">
<define:tag name="check-needed">
<j:if test="${maven.javadoc.debug}"><ant:echo>check-needed</ant:echo></j:if>
<j:choose>
<j:when test="${internal.javadoc.needed != null}">
<!-- We have already decided if javadoc is needed -->
<j:if test="${maven.javadoc.debug}"><ant:echo>${internal.javadoc.needed} not null</ant:echo></j:if>
</j:when>
<j:otherwise>
<!-- Create a patternset for source modifications -->
<patternset id="source.modifications">
<ant:include name="**/*.java"/>
<!-- handle source modifications -->
<j:forEach var="sm" items="${pom.build.sourceModifications}">
<ant:available property="classPresent" classname="${sm.className}"/>
<j:if test="${classPresent != 'true'}">
<j:forEach var="exclude" items="${sm.excludes}">
<ant:exclude name="${exclude}"/>
</j:forEach> <!-- end sourceModification exclude -->
<j:forEach var="include" items="${sm.includes}">
<ant:include name="${include}"/>
</j:forEach> <!-- end sourceModification include -->
</j:if>
</j:forEach> <!-- end sourceModification -->
</patternset>
<!-- test if sourceModifications are defined -->
<j:if test="${pom.build.sourceModifications != null &amp;&amp; !pom.build.sourceModifications.isEmpty()}">
<j:set var="internal.javadoc.src.modifs" scope="parent" value="true"/>
</j:if>
<j:if test="${maven.javadoc.debug}">
<ant:echo>internal.javadoc.src.modifs is ${internal.javadoc.src.modifs}</ant:echo>
</j:if>
<!-- Tokenize the set of directories -->
<util:tokenize var="sources.dirs" delim="${path.separator}">${internal.javadoc.src.set}</util:tokenize>
<!-- Counter used to name filesets -->
<j:set var="src.set.counter" value="0"/>
<!-- For each directory -->
<j:forEach var="dir" items="${sources.dirs}">
<!-- If we have not already find sources -->
<j:if test="${internal.javadoc.needed != true}">
<!-- We construct the fileset -->
<ant:fileset id="${src.set.counter}" dir="${dir}">
<patternset refid="source.modifications"/>
</ant:fileset>
<ant:fileScanner var="sources">
<ant:fileset refid="${src.set.counter}" />
</ant:fileScanner>
<j:set var="internal.javadoc.needed" scope="parent"
value="${sources.iterator().hasNext()}" />
<j:set var="src.set.counter" value="${src.set.counter + 1}"/>
</j:if>
</j:forEach> <!-- dir in maven.compile.src.set -->
</j:otherwise>
</j:choose>
<j:if test="${maven.javadoc.debug}">
<ant:echo>internal.javadoc.needed is ${internal.javadoc.needed}</ant:echo>
</j:if>
</define:tag>
</define:taglib>
<!-- ================================================================== -->
<!-- J A V A D O C S R E P O R T S -->
<!-- ================================================================== -->
<goal name="maven-javadoc-plugin:register">
<javadoc:check-needed/>
<j:if test="${internal.javadoc.needed}">
<doc:registerReport
name="JavaDocs"
pluginName="maven-javadoc-plugin"
link="apidocs/index"
target="_blank"
description="JavaDoc API documentation."
/>
<doc:registerReport
name="JavaDoc Report"
pluginName=""
link="javadoc"
description="Report on the generation of JavaDoc."
/>
</j:if>
</goal>
<goal name="maven-javadoc-plugin:deregister">
<doc:deregisterReport name="JavaDocs"/>
<doc:deregisterReport name="JavaDoc Report"/>
</goal>
<!-- ================================================================== -->
<!-- J A V A D O C S -->
<!-- ================================================================== -->
<goal name="maven-javadoc-plugin:report"
prereqs="javadoc:init"
description="Generate API documentation">
<javadoc:check-needed/>
<j:if test="${internal.javadoc.needed}">
<ant:mkdir dir="${maven.javadoc.destdir}"/>
<!-- Get the year to display in the Javadocs -->
<ant:tstamp>
<ant:format property="currentYear" pattern="yyyy"/>
</ant:tstamp>
<ant:tstamp>
<j:choose>
<j:when test="${pom.inceptionYear.equals(currentYear)}">
<ant:format property="year" pattern="yyyy"/>
</j:when>
<j:otherwise>
<ant:format property="year" pattern="${pom.inceptionYear}-yyyy"/>
</j:otherwise>
</j:choose>
</ant:tstamp>
<ant:property name="copyright"
value="Copyright &amp;copy; ${year} ${pom.organization.name}. All Rights Reserved." />
<!-- calculate online/offline mode -->
<j:set var="online" value="${maven.javadoc.mode.online}"/>
<j:if test="${empty(online)}">
<j:set var="online" value="${maven.mode.online}"/>
</j:if>
<j:choose>
<j:when test="${online}">
<util:tokenize var="links" delim="," trim="true">${maven.javadoc.links}</util:tokenize>
<j:forEach var="link" items="${links}">
<ant:echo>Linking with API information from ${link.trim()} ...</ant:echo>
</j:forEach>
</j:when>
<j:otherwise>
<util:tokenize var="links" delim="," trim="true">${maven.javadoc.offlineLinks}</util:tokenize>
<j:forEach var="link" items="${links}">
<ant:echo>Linking offline API information from ${link.trim()} ...</ant:echo>
</j:forEach>
</j:otherwise>
</j:choose>
<j:set var="maxMemory" value="${maven.javadoc.maxmemory}" />
<ant:mkdir dir="${internal.javadoc.working.dir}" />
<ant:record name="${internal.javadoc.working.dir}/report.txt" action="start" />
<ant:javadoc
packagenames="${pom.package}.*"
destdir="${maven.javadoc.destdir}"
author="${maven.javadoc.author}"
public="${maven.javadoc.public}"
package="${maven.javadoc.package}"
private="${maven.javadoc.private}"
version="${maven.javadoc.version}"
use="${maven.javadoc.use}"
windowtitle="${maven.javadoc.windowtitle}"
doctitle="${maven.javadoc.windowtitle}"
bottom="${copyright}"
stylesheetfile="${maven.javadoc.stylesheet}"
additionalparam="${maven.javadoc.additionalparam}"
useexternalfile="${maven.javadoc.useexternalfile}"
verbose="${maven.javadoc.debug}"
>
<j:if test="${internal.javadoc.src.modifs == true}">
<j:if test="${maven.javadoc.debug}">
<ant:echo>Javadoc uses a fileset</ant:echo>
</j:if>
<!-- Tokenize the set of directories -->
<util:tokenize var="sources.dirs" delim="${path.separator}">${internal.javadoc.src.set}</util:tokenize>
<j:forEach var="dir" items="${sources.dirs}">
<echo>[${dir}] added to javadoc sources</echo>
<ant:fileset dir="${dir}">
<patternset refid="source.modifications"/>
</ant:fileset>
</j:forEach> <!-- dir in maven.compile.src.set -->
</j:if>
<j:if test="${internal.javadoc.src.modifs != true}">
<j:if test="${maven.javadoc.debug}">
<ant:echo>Javadoc uses a source path</ant:echo>
</j:if>
<ant:sourcepath>
<ant:path refid="maven.compile.src.set"/>
</ant:sourcepath>
</j:if>
<j:if test="${context.getVariable('maven.javadoc.source') != null}">
<ant:setProperty name="source" value="${maven.javadoc.source}" />
</j:if>
<!-- Process/Parse links -->
<!-- This code allows to specify a packagelistLoc even when in online mode -->
<j:forEach var="link" items="${links}">
<j:set var="pos" value="${link.indexOf('#')}" />
<!-- set href and packagelistLoc -->
<j:choose>
<!-- I am bad with jelly, the test is: "pos == -1" -->
<j:when test="${1+pos == 0}">
<j:set var="href" value="${link.trim()}" />
<j:set var="packagelistLoc" value="${href}"/>
</j:when>
<j:otherwise>
<j:set var="href" value="${link.substring(0,pos).trim()}"/>
<j:set var="packagelistLoc" value="${link.substring(pos).substring(1).trim()}"/>
</j:otherwise>
</j:choose>
<!-- generate the link -->
<j:choose>
<j:when test="${online}" >
<ant:link href="${href}" offline="false" packagelistLoc="${packagelistLoc}" />
</j:when>
<j:otherwise>
<ant:link href="${href}" offline="true" packagelistLoc="${packagelistLoc}" />
</j:otherwise>
</j:choose>
</j:forEach>
<ant:classpath>
<ant:path refid="maven.dependency.classpath"/>
<ant:path location="${maven.build.dest}"/>
</ant:classpath>
<j:if test="${context.getVariable('maven.javadoc.locale') != null}">
<ant:setProperty name="locale" value="${maven.javadoc.locale}" />
</j:if>
<j:if test="${context.getVariable('maven.javadoc.overview') != null}">
<ant:setProperty name="overview" value="${maven.javadoc.overview}" />
</j:if>
<j:if test="${maxMemory != null}">
<ant:setProperty name="maxmemory" value="${maven.javadoc.maxmemory}" />
</j:if>
<j:forEach var="packageGroup" items="${pom.packageGroups}">
<ant:group title="${packageGroup.title}" packages="${packageGroup.packages}"/>
</j:forEach>
<!-- allow custom doclets -->
<j:if test="${context.getVariable('maven.javadoc.doclet') != null}">
<ant:setProperty name="doclet" value="${maven.javadoc.doclet}" />
</j:if>
<j:if test="${context.getVariable('maven.javadoc.docletpath') != null}">
<ant:setProperty name="docletpath" value="${maven.javadoc.docletpath}" />
</j:if>
<!-- allow custom tags -->
<util:tokenize var="listOfTags" delim=" ">${maven.javadoc.customtags}</util:tokenize>
<j:forEach var="someTag" items="${listOfTags}">
<j:set var="nameVar" value="${someTag}.name"/>
<j:set var="name" value="${context.findVariable(nameVar)}"/>
<j:set var="descriptionVar" value="${someTag}.description"/>
<j:set var="description" value="${context.findVariable(descriptionVar)}"/>
<j:set var="enabledVar" value="${someTag}.enabled"/>
<j:set var="enabled" value="${context.findVariable(enabledVar)}"/>
<j:set var="scopeVar" value="${someTag}.scope"/>
<j:set var="scope" value="${context.findVariable(scopeVar)}"/>
<ant:tag name="${name}" description="${description}"
enabled="${enabled}" scope="${scope}"/>
</j:forEach>
<!-- allow taglets -->
<util:tokenize var="listOfTaglets" delim="," trim="true">${maven.javadoc.taglets}</util:tokenize>
<j:set var="tagletPath" value="${context.getVariable('maven.javadoc.tagletpath')}" />
<j:forEach var="someTaglet" items="${listOfTaglets}">
<ant:taglet name="${someTaglet}" path="${tagletPath}" />
</j:forEach>
</ant:javadoc>
<ant:record name="${internal.javadoc.working.dir}/report.txt" action="stop" />
<j:set var="genDocs" value="${maven.gen.docs}" />
<!-- load file in order to remove absolute paths -->
<util:file name="${internal.javadoc.working.dir}/report.txt" var="inputFileObject"/>
<util:loadText var="inputText" file="${inputFileObject}"/>
<!-- remove [javadoc] prefix from rows -->
<j:invokeStatic var="inputText" className="org.apache.commons.lang.StringUtils" method="replace">
<j:arg type="java.lang.String" value="${inputText}" />
<j:arg type="java.lang.String" value="[javadoc] " />
<j:arg type="java.lang.String" value="" />
</j:invokeStatic>
<!-- trim path to basedir/ -->
<j:set var="pathToTrim">${basedir}${file.separator}</j:set>
<j:invokeStatic var="inputText" className="org.apache.commons.lang.StringUtils" method="replace">
<j:arg type="java.lang.String" value="${inputText}" />
<j:arg type="java.lang.String" value="${pathToTrim}" />
<j:arg type="java.lang.String" value="" />
</j:invokeStatic>
<!-- trim path to maven home (stylesheet copy) -->
<j:set var="pathToTrim">${maven.home}${file.separator}</j:set>
<j:invokeStatic var="inputText" className="org.apache.commons.lang.StringUtils" method="replace">
<j:arg type="java.lang.String" value="${inputText}" />
<j:arg type="java.lang.String" value="${pathToTrim}" />
<j:arg type="java.lang.String" value="" />
</j:invokeStatic>
<doc:text-xdoc
title="Javadoc Report"
section="Javadoc Report"
inputText="${inputText}"
output="${genDocs}/javadoc.xml"/>
<j:if test="${internal.javadoc.src.modifs}">
<!--
Because we use in the javadoc task a fileset and not a packageset
(to allow sourceModifications) the javadoc doesn't copy
automatically doc-files directories.
We must do it manually.
-->
<util:tokenize var="sources.dirs" delim="${path.separator}">${internal.javadoc.src.set}</util:tokenize>
<ant:copy todir="${maven.javadoc.destdir}">
<j:forEach var="dir" items="${sources.dirs}">
<ant:fileset dir="${dir}">
<ant:include name="**/doc-files/**/*"/>
</ant:fileset>
</j:forEach>
</ant:copy>
</j:if>
</j:if>
<j:if test="not ${internal.javadoc.needed}">
<ant:echo>No sources found. Javadoc not created !</ant:echo>
</j:if>
</goal>
<!-- ================================================================== -->
<!-- P A C K A G E A N D D E P L O Y J A V A D O C S -->
<!-- ================================================================== -->
<!--==================================================================-->
<!-- Create a jar file containing the javadoc -->
<!--==================================================================-->
<goal name="javadoc:jar" prereqs="javadoc">
<j:set var="maven.javadoc.final.name"
value="${internal.javadoc.jar}" />
<ant:jar
destfile="${maven.javadoc.final.name}"
basedir="${maven.javadoc.destdir}"
update="true">
</ant:jar>
</goal>
<!--==================================================================-->
<!-- Install the jar in the local repository -->
<!--==================================================================-->
<goal name="javadoc:install"
prereqs="javadoc:jar"
description="Install the jar containing javadoc in the local repository">
<artifact:install
artifact="${maven.javadoc.final.name}"
type="javadoc"
project="${pom}"/>
</goal>
<!--==================================================================-->
<!-- Install the snapshot version of the jar in the local repository -->
<!--==================================================================-->
<goal name="javadoc:install-snapshot"
prereqs="javadoc:jar"
description="Install the snapshot version of the jar containing javadoc in the local repository">
<artifact:install-snapshot
artifact="${maven.javadoc.final.name}"
type="javadoc"
project="${pom}"/>
</goal>
<!--==================================================================-->
<!-- Deploys the javadoc to the remote repository -->
<!--==================================================================-->
<goal name="javadoc:deploy"
prereqs="javadoc:jar"
description="Deploys the jar containing javadoc to the remote repository">
<artifact:deploy
artifact="${maven.javadoc.final.name}"
type="javadoc"
project="${pom}"/>
</goal>
<!--==================================================================-->
<!-- Deploys the snapshot of the javadoc to the remote repository -->
<!--==================================================================-->
<goal name="javadoc:deploy-snapshot"
prereqs="javadoc:jar"
description="Deploys the snapshot version of jar containing javadoc to remote repository">
<artifact:deploy-snapshot
artifact="${maven.javadoc.final.name}"
type="javadoc"
project="${pom}"/>
</goal>
<!-- ================================================================== -->
<!-- B A C K W A R D C O M P A T I B I L I T Y -->
<!-- ================================================================== -->
<!-- Some aliases for ease of use and backward compat. -->
<goal name="javadoc:generate" prereqs="maven-javadoc-plugin:report"/>
<goal name="javadoc" prereqs="maven-javadoc-plugin:report"/>
</project>