Hi ant users and developers,

I enhanced the javadoc task in order to make full use of some javadoc
features as descibed in
http://jakarta.apache.org/bugs/show_bug.cgi?id=64

which means:
* support for multiple link options
* support for multiple group options
* support for the @ argument

 - link and linkoffline: you can now list more than one -link option,
using a ; separator in your link tag to separate the different lines
that will be generated
 - group: same remark, you can now list more than one -group option,
using a ; separator in your group tag. arguments are
groupheading;packagepattern:packagepattern:..
 - group: the syntax is "-group  groupheading
packagepattern:packagepattern:.."
 - the COMMAND LINE ARGUMENT FILE syntax: javadoc -d apidocs @packages
is now supported with the packagelist
tag this is how these options can be used in a build.xml file:

    <javadoc sourcepath="${src.dir}"
             destdir="${build.javadocs}"
             author="true"
             version="true"
             windowtitle="${Name} API"
             doctitle="${Name}"
             bottom="Copyright &#169; 2000 Apache Software Foundation.
All Rights Reserved."

link="http://java.sun.com/products/jdk/1.2/docs/api/;http://developer.java.sun.com/developer/products/xml/docs/api/";

             group="Ant Tools Packages;org.apache.tools.ant;Ant Task
Packages;org.apache.tools.ant.taskdefs"
             packageList="src/etc/packagelist.txt"
    />

I also attach a modified version of build.xml for ant and
packagelist.txt (you should put it in src/etc)
try ant javadocs on your ant tree with the patch and these 2 files, to
see the result.
And let me know if you like the separator syntax: allowing 2 attributes
with the same name would maybe be a better option, and an xml element
for groups, with 2 attributes. It would be more readable. If you prefer
this just let me know so that I can implement it.

I hope you'll like the improvement

P@

--
Patrick Chanezon, Vortex - Portal/EServices Technical Lead
Netscape Communications Corp. - http://people.netscape.com/chanezon/
Opinions are my own.

"Ouais, n'emp�che qu'� la retraite de Russie, c'est les mecs qu'�taient
� la tra�ne qu'ont �t� repass�s..." - Michel Audiard - Les Tontons
Flingueurs

Index: Javadoc.java
===================================================================
RCS file: 
/home/cvspublic/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/Javadoc.java,v
retrieving revision 1.7
diff -u -r1.7 Javadoc.java
--- Javadoc.java        2000/03/03 14:15:42     1.7
+++ Javadoc.java        2000/03/14 03:02:11
@@ -75,6 +75,21 @@
  *
  * @author Jon S. Stevens <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
  * @author Stefano Mazzocchi <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
+ * @author Patrick Chanezon <a href="mailto:[EMAIL PROTECTED]">[EMAIL 
PROTECTED]</a>
+ * I enhanced the task as described in 
http://jakarta.apache.org/bugs/show_bug.cgi?id=64
+ * which means:
+ * support for multiple link options
+ * support for multiple group options
+ * support for @
+ * - link and linkoffline: you can now list more than one -link option, using 
a ; separator in your link tag to separate the different lines that will be 
generated
+ * - group: same remark, you can now list more than one -group option, using a 
; separator in your group tag. arguments are 
groupheading;packagepattern:packagepattern:..
+ * - group: the syntax is "-group  groupheading  
packagepattern:packagepattern:.."
+ * - the COMMAND LINE ARGUMENT FILE syntax: javadoc -d apidocs @packages is 
now supported with the packagelist tag
+ * this is how these options can be used in a build.xml file:
+ * 
link="http://java.sun.com/products/jdk/1.2/docs/api/;http://java.sun.com/products/servlet/2.2/javadoc/;http://developer.java.sun.com/developer/products/xml/docs/api/";
+ * group="Group1 Packages;com.blahblah.pack1*:com.blahblah.pack2*;Group2 
Packages;com.blahblah.pack3*:com.blahblah.pack4*"
+             packageList="${src.dir}/doc/packagelist.txt"
+
  */
 
 public class Javadoc extends Exec {
@@ -119,6 +134,8 @@
     private File helpfile = null;
     private String docencoding = null;
     private Vector compileList = new Vector(10);
+    private String packageList = null;
+    private static final String multipleArgumentSeparator  = ";";
 
     public void setSourcepath(String src) {
         sourcePath = project.translatePath(src);
@@ -359,16 +376,34 @@
                 argList.addElement(bottom);
             }
             if (link != null) {
-                argList.addElement("-link");
-                argList.addElement(link);
+                // if no separator in the link list, we just add it to the 
arguments
+                if (link.lastIndexOf(multipleArgumentSeparator) < 0) {
+                    argList.addElement("-link");
+                    argList.addElement(link);
+                }
+                else {
+                    generateMultipleArgs("link", link, argList, 1);
+                }
             }
             if (linkoffline != null) {
-                argList.addElement("-linkoffline");
-                argList.addElement(linkoffline);
+                // if no separator in the link list, we just add it to the 
arguments
+                if (linkoffline.lastIndexOf(multipleArgumentSeparator) < 0) {
+                    argList.addElement("-linkoffline");
+                    argList.addElement(linkoffline);
+                }
+                else {
+                    generateMultipleArgs("linkoffline", linkoffline, argList, 
1);
+                }
             }
             if (group != null) {
-                argList.addElement("-group");
-                argList.addElement(group);
+                // if no separator in the link list, we just add it to the 
arguments
+                if (link.lastIndexOf(multipleArgumentSeparator) < 0) {
+                    argList.addElement("-group");
+                    argList.addElement(group);
+                }
+                else {
+                    generateMultipleArgs("group", group, argList, 2);
+                }
             }
             if (stylesheetfile != null) {
                 argList.addElement("-stylesheetfile");
@@ -403,6 +438,9 @@
             }
         }
 
+        if (packageList != null) {
+            argList.addElement("@" + packageList);
+        }
         project.log("Javadoc args: " + argList.toString(), "javadoc", 
project.MSG_VERBOSE);
 
         project.log("Javadoc execution", project.MSG_INFO);
@@ -446,6 +484,24 @@
                     argList.addElement(pack);
                     break;
                 }
+            }
+        }
+    }
+
+    /**
+     * Given a list of arguments separated by ; generates multiple argName 
arguments
+     * this is useful to pass multiple group and link arguments to javadoc
+     */
+    private void generateMultipleArgs(String argName, String argValue, Vector 
argList, int Dimension) {
+        project.log("Generating multiple " + argName + " arguments", 
project.MSG_INFO);
+        project.log("argValue = " + argValue, project.MSG_VERBOSE);
+
+        StringTokenizer tok = new StringTokenizer(argValue, 
multipleArgumentSeparator, false);
+        while (tok.hasMoreTokens()) {
+            argList.addElement("-" + argName);
+            for (int i = 0; i < Dimension; ++i)
+            {
+                argList.addElement(new String(tok.nextToken().trim()));
             }
         }
     }
<?xml version="1.0"?>

<!-- ======================================================================= -->
<!-- Ant own build file                                                      -->
<!-- ======================================================================= -->

<project name="Ant" default="main" basedir=".">

  <target name="init">
    <property name="Name" value="Ant"/>
    <property name="name" value="ant"/>
    <property name="version" value="1.0-rc1"/>

    <property name="ant.home" value="."/>
    <property name="bin.dir" value="bin"/>
    <property name="src.bin.dir" value="src/bin"/>
    <property name="src.dir" value="${basedir}/src/main"/>
    <property name="lib.dir" value="lib"/>
    <property name="docs.dir" value="docs"/>
    <property name="build.dir" value="build"/>
    <property name="build.classes" value="build/classes"/>
    <property name="build.javadocs" value="build/javadocs"/>
    <property name="ant.dist.dir" value="dist"/>

    <property name="classpath" value="lib/xml.jar"/>
<!--    <property name="packages" value="org.apache.tools.*"/>   -->
    <property name="manifest" value="src/etc/manifest"/>

    <property name="build.compiler" value="classic"/>

    <!-- Give user a chance to override without editing this file 
         (and without typing -D each time it compiles it -->
    <property file="${user.home}/.ant.properties" />
  </target>

  <!-- =================================================================== -->
  <!-- Prepares the build directory                                        -->
  <!-- =================================================================== -->
  <target name="prepare" depends="init">
    <mkdir dir="${build.dir}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Compiles the source code                                            -->
  <!-- =================================================================== -->
  <target name="compile" depends="prepare">
    <mkdir dir="${build.classes}"/>
    <javac srcdir="${src.dir}"
           destdir="${build.classes}"
           classpath="${classpath}"
           debug="on"
           deprecation="on"
           optimize="on"
    />
  </target>

  <!-- =================================================================== -->
  <!-- Creates the jar archive                                             -->
  <!-- =================================================================== -->
  <target name="jar" depends="compile">
    <jar jarfile="${lib.dir}/${name}.jar"
         basedir="${build.classes}"
         includes="org/**"
         manifest="${manifest}"
    />
  </target>

  <!-- =================================================================== -->
  <!-- Creates the binary structure                                        -->
  <!-- =================================================================== -->
  <target name="main" depends="jar">
     <mkdir dir="${bin.dir}"/>
     <copydir src="${src.bin.dir}" dest="${bin.dir}"/>
     <chmod perm="+x" src="${bin.dir}/ant"/>
     <chmod perm="+x" src="${bin.dir}/antRun"/>
     <fixcrlf srcdir="${bin.dir}" includes="ant,antRun" cr="remove"/>
     <fixcrlf srcdir="${bin.dir}" includes="*.bat" cr="add"/>
  </target>

  <!-- =================================================================== -->
  <!-- Creates the API documentation                                       -->
  <!-- =================================================================== -->
  <target name="javadocs" depends="prepare">
    <mkdir dir="${build.javadocs}"/>
<!--    <javadoc packagenames="${packages}"   -->
    <javadoc sourcepath="${src.dir}"
             destdir="${build.javadocs}"
             author="true"
             version="true"
             windowtitle="${Name} API"
             doctitle="${Name}"
             bottom="Copyright &#169; 2000 Apache Software Foundation. All Rights Reserved."
             link="http://java.sun.com/products/jdk/1.2/docs/api/;http://developer.java.sun.com/developer/products/xml/docs/api/";
             group="Ant Tools Packages;org.apache.tools.ant;Ant Task Packages;org.apache.tools.ant.taskdefs"
             packageList="src/etc/packagelist.txt"
    />
  </target>

  <!-- =================================================================== -->
  <!-- Creates the distribution                                            -->
  <!-- =================================================================== -->
  <target name="dist" depends="main,jar,javadocs">
     <mkdir dir="${ant.dist.dir}"/>
     <mkdir dir="${ant.dist.dir}/bin"/>
     <mkdir dir="${ant.dist.dir}/lib"/>
     <mkdir dir="${ant.dist.dir}/docs"/>
     <mkdir dir="${ant.dist.dir}/docs/api"/>
     <mkdir dir="${ant.dist.dir}/src"/>

     <copydir src="${src.dir}" dest="${ant.dist.dir}/src"/>
     <copydir src="${lib.dir}" dest="${ant.dist.dir}/lib"/>

     <copyfile src="build.xml" dest="${ant.dist.dir}/lib/build.xml"/>
     <copydir src="src/bin" dest="${ant.dist.dir}/bin"/>
     <copydir src="${docs.dir}" dest="${ant.dist.dir}/docs"/>
     <copydir src="${build.javadocs}" dest="${ant.dist.dir}/docs/api"/>

     <chmod perm="+x" src="${ant.dist.dir}/bin/ant"/>
     <chmod perm="+x" src="${ant.dist.dir}/bin/antRun"/>

     <copyfile src="README" dest="${ant.dist.dir}/README"/>
     <copyfile src="TODO" dest="${ant.dist.dir}/TODO"/>
     <copyfile src="LICENSE" dest="${ant.dist.dir}/LICENSE"/>
  </target>

  <!-- =================================================================== -->
  <!-- Packages the distribution with ZIP                                  -->
  <!-- =================================================================== -->
  <target name="dist-zip" depends="dist">
    <zip zipfile="${Name}-${version}.zip" basedir="${ant.dist.dir}" includes="**"/>
  </target>

  <!-- =================================================================== -->
  <!-- Packages the distribution with TAR-GZIP                             -->
  <!-- =================================================================== -->
  <target name="dist-tgz" depends="dist">
    <tar tarfile="${Name}-${version}.tar" basedir="${ant.dist.dir}" includes="**"/>
    <gzip zipfile="${Name}-${version}.tar.gz" src="${Name}-${version}.tar"/>
  </target>

  <!-- =================================================================== -->
  <!-- Cleans up generated stuff                                           -->
  <!-- =================================================================== -->
  <target name="clean" depends="init">
    <deltree dir="${build.dir}"/>
    <deltree dir="${ant.dist.dir}"/>
  </target>

  <!-- =================================================================== -->
  <!-- Total cleanup                                                       -->
  <!-- =================================================================== -->
  <target name="total-clean" depends="clean">
    <deltree dir="${bin.dir}"/>
    <delete file="${lib.dir}/${name}.jar"/>
    <delete file="${Name}-${version}.zip"/>
    <delete file="${Name}-${version}.tar"/>
    <delete file="${Name}-${version}.tar.gz"/>
  </target>

  <!-- in progress ! (may not work) -->

  <target name="get.snapshot" depends="init">
    <get src="http://jakarta.apache.org/build/tmp/ant/ant.src.zip"; dest="ant-src.zip" />
    <expand src="ant-src.zip" dest="." />
  </target>

  <target name="make.snapshot">
    <cvs cvsRoot=":pserver:[EMAIL PROTECTED]:/home/cvspublic"
         package="jakarta-ant"
         dest="."  />
    <zip zipfile="/www/jakarta.apache.org/builds/tmp/ant/ant.src.zip" basedir="." includes="jakarta-ant/**"/>
  </target>

</project>

org.apache.tools.ant
org.apache.tools.ant.taskdefs
begin:vcard 
n:Chanezon;Patrick
tel;fax:603.388-9565
tel;work:650.937.6605
x-mozilla-html:TRUE
org:<CENTER><A HREF="http://www.iplanet.com/";><IMG SRC="http://www.iplanet.com/images/header_images/logo.gif"; BORDER=0 </A></CENTER>;Vortex
version:2.1
email;internet:[EMAIL PROTECTED]
title:<I>Vortex - Portal/EServices Technical Lead</I>
note:<A HREF="http://people.netscape.com/chanezon/";><IMG SRC="http://people.netscape.com/chanezon/patrick_photo_identite.jpg"; BORDER=0 HEIGHT=70 WIDTH=49></A><BR>Have Fun with <A HREF="http://www.javasoft.com/";><IMG SRC="http://www.javasoft.com/images/logos/javalogo52x88.gif"; border="0" HEIGHT="88" WIDTH="52"></A><BR><hr><BR>
adr;quoted-printable:;;Netscape Communications Corp.=0D=0A501 E. Middlefield Road=0D=0ABuilding 6=0D=0AMV-025;Mountain View;CA;94043;USA
fn:Patrick Chanezon
end:vcard

Reply via email to