bodewig     2004/06/25 06:50:16

  Modified:    .        Tag: ANT_16_BRANCH TODO WHATSNEW build.xml
               docs     Tag: ANT_16_BRANCH faq.html
               docs/manual/OptionalTasks Tag: ANT_16_BRANCH
                        junitreport.html
               src/etc  Tag: ANT_16_BRANCH junit-frames.xsl
               src/main/org/apache/tools/ant/taskdefs/optional/junit Tag:
                        ANT_16_BRANCH Xalan1Executor.java
                        Xalan2Executor.java XalanExecutor.java
               xdocs    Tag: ANT_16_BRANCH faq.xml
  Added:       src/etc  Tag: ANT_16_BRANCH junit-frames-xalan1.xsl
  Log:
  typos
  
  Revision  Changes    Path
  No                   revision
  No                   revision
  1.3.2.23  +0 -3      ant/Attic/TODO
  
  Index: TODO
  ===================================================================
  RCS file: /home/cvs/ant/Attic/TODO,v
  retrieving revision 1.3.2.22
  retrieving revision 1.3.2.23
  diff -u -r1.3.2.22 -r1.3.2.23
  --- TODO      23 Jun 2004 19:17:11 -0000      1.3.2.22
  +++ TODO      25 Jun 2004 13:50:16 -0000      1.3.2.23
  @@ -9,9 +9,6 @@
   
   * review claimed AntClassLoader memory leak [Stefan]
   
  -* <junitreport> and JDK 1.5 [Stefan hopes that Stephane solves it for
  -  him, otherwise he'll do it himself]
  -
   * AntClassLoader parent loader [Start thread, Peter]
   
   * delete - do not follow symlinks [Peter, may be dropped for 1.6.2]
  
  
  
  1.503.2.114 +14 -0     ant/WHATSNEW
  
  Index: WHATSNEW
  ===================================================================
  RCS file: /home/cvs/ant/WHATSNEW,v
  retrieving revision 1.503.2.113
  retrieving revision 1.503.2.114
  diff -u -r1.503.2.113 -r1.503.2.114
  --- WHATSNEW  23 Jun 2004 19:17:11 -0000      1.503.2.113
  +++ WHATSNEW  25 Jun 2004 13:50:16 -0000      1.503.2.114
  @@ -17,6 +17,17 @@
   * Nested elements for namespaced tasks and types may belong to the
     Ant default namespace as well as the task's or type's namespace.
   
  +* <junitreport> will very likely no longer work with Xalan-J 1.
  +
  +  Note that Xalan-J 1 has been deprecated for a very long time and we
  +  highly recommend that you upgrade.
  +
  +  If you really need to continue using Xalan-J 1, please copy the
  +  junit-frames-xalan1.xsl from the distribution's etc directory as
  +  junit-frames.xsl into a new directory and use the task's styledir
  +  attribute to point to.  This is the last version of the XSLT
  +  stylesheet that is expected to be compatible with Xalan-J 1.
  +
   Fixed bugs:
   -----------
   
  @@ -217,6 +228,9 @@
   * <apply> has a new ignoremissing attribute (default true for BC)
     which will allow nonexistent files specified via <filelist>s to
     be passed to the executable.  Bugzilla Report 29585.
  +
  +* <junitreport> now also works with Xalan XSLTC and/or JDK 1.5.
  +  Bugzilla Report 27541.
   
   Changes from Ant 1.6.0 to Ant 1.6.1
   =============================================
  
  
  
  1.392.2.30 +1 -0      ant/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/ant/build.xml,v
  retrieving revision 1.392.2.29
  retrieving revision 1.392.2.30
  diff -u -r1.392.2.29 -r1.392.2.30
  --- build.xml 2 Jun 2004 12:10:59 -0000       1.392.2.29
  +++ build.xml 25 Jun 2004 13:50:16 -0000      1.392.2.30
  @@ -1031,6 +1031,7 @@
           <fileset dir="${etc.dir}">
               <include name="junit-frames.xsl"/>
               <include name="junit-noframes.xsl"/>
  +            <include name="junit-frames-xalan1.xsl"/>
               <include name="coverage-frames.xsl"/>
               <include name="maudit-frames.xsl"/>
               <include name="mmetrics-frames.xsl"/>
  
  
  
  No                   revision
  No                   revision
  1.77.2.15 +2 -2      ant/docs/faq.html
  
  Index: faq.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/faq.html,v
  retrieving revision 1.77.2.14
  retrieving revision 1.77.2.15
  diff -u -r1.77.2.14 -r1.77.2.15
  --- faq.html  16 Jun 2004 14:27:27 -0000      1.77.2.14
  +++ faq.html  25 Jun 2004 13:50:16 -0000      1.77.2.15
  @@ -1669,8 +1669,8 @@
           extensions for its internal stylesheet, Ant doesn't support
           XSLTC yet.  This means that you have to install <a 
href="http://xml.apache.org/xalan-j/";>Xalan-J 2</a> in order
           to use this task with JDK 1.5.</p>
  -                        <p>If you want to follow progress on this, <a 
href="http://issues.apache.org/bugzilla/show_bug.cgi?id=27541";>here</a>
  -        is the relevant bug report.</p>
  +                        <p>Starting with Ant 1.6.2 
<code>&lt;junitreport&gt;</code>
  +        will support JDK 1.5.</p>
                       </div>
     </div>
   
  
  
  
  No                   revision
  No                   revision
  1.11.2.4  +19 -15    ant/docs/manual/OptionalTasks/junitreport.html
  
  Index: junitreport.html
  ===================================================================
  RCS file: /home/cvs/ant/docs/manual/OptionalTasks/junitreport.html,v
  retrieving revision 1.11.2.3
  retrieving revision 1.11.2.4
  diff -u -r1.11.2.3 -r1.11.2.4
  --- junitreport.html  2 Jun 2004 12:33:21 -0000       1.11.2.3
  +++ junitreport.html  25 Jun 2004 13:50:16 -0000      1.11.2.4
  @@ -15,21 +15,25 @@
   Library Dependencies</a> for more information.</p>
   
   <h3>Requirements</h3>
  -<p>The task needs <a href="http://xml.apache.org/xalan-j/";>Xalan
  -2.x</a>; although <a
  -href="http://xml.apache.org/dist/xalan-j/old/xalan-j_1_2_2.zip";>Xalan
  -1.2.2</a> does work, but as Xalan1 is not supported, we do not
  -recommend this.  While JDK 1.4.x contains a version of Xalan-J 2, JDK
  -1.5 and later have <a
  -href="http://java.sun.com/j2se/1.5.0/compatibility.html#4959783";>moved
  -to XSLTC</a>.  Since this task uses Xalan's redirect extensions for
  -its internal stylesheet, Ant doesn't support XSLTC yet.  This means
  -that you have to install Xalan-J 2 in order to use this task with JDK
  -1.5.</p>
  -<p>
  -If you do you use Xalan 1.2.2 you will need a compatible (older) version of 
Xerces.
  -as well as BSF(bsf.jar). Again, using Xalan 2 is simpler and supported.
  -</i></p>
  +
  +<p>The task needs Apache <a
  +href="http://xml.apache.org/xalan-j/";>Xalan 2.x or Xalan XSLTC</a>
  +(JDK 1.4 contains a version of Xalan-J 2.x while JDK 1.5 ships with a
  +version of XSLTC).  Versions prior to Ant 1.6.2 worked with Apache <a
  +href="http://archive.apache.org/dist/xml/xalan-j/";>Xalan
  +1.2.2</a>, but as Xalan1 is no longer supported, we do not recommend
  +this.  With Ant 1.6.2 we had to decide between supporting Xalan-J 1
  +and XSLTC, since there was no way to support both at the same
  +time.</p>
  +
  +<p>If you want to use Xalan 1.2.2, the noframes report is still
  +supposed to work.  If you want the frames support, copy the file
  +junit-frames-xalan1.xsl from the Ant distribution's etc directory to a
  +new directory, change its name to junit-frames.xsl and use the task's
  +styledir attribute to point to it.  You will also need a compatible
  +(older) version of Xerces.  as well as BSF(bsf.jar). Again, using
  +Xalan 2 is simpler and supported.</p>
  +
   <h3>Parameters</h3>
   <table border="1" cellpadding="2" cellspacing="0">
     <tr>
  
  
  
  No                   revision
  No                   revision
  1.16.2.5  +1 -1      ant/src/etc/junit-frames.xsl
  
  Index: junit-frames.xsl
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/junit-frames.xsl,v
  retrieving revision 1.16.2.4
  retrieving revision 1.16.2.5
  diff -u -r1.16.2.4 -r1.16.2.5
  --- junit-frames.xsl  8 Jun 2004 13:54:53 -0000       1.16.2.4
  +++ junit-frames.xsl  25 Jun 2004 13:50:16 -0000      1.16.2.5
  @@ -1,6 +1,6 @@
   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="1.0"
       xmlns:lxslt="http://xml.apache.org/xslt";
  -    xmlns:redirect="org.apache.xalan.lib.Redirect"
  +    xmlns:redirect="http://xml.apache.org/xalan/redirect";
       xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
       extension-element-prefixes="redirect">
   <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
  
  
  
  No                   revision
  
  Index: junit-frames.xsl
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/junit-frames.xsl,v
  retrieving revision 1.16.2.4
  retrieving revision 1.16.2.5
  diff -u -r1.16.2.4 -r1.16.2.5
  --- junit-frames.xsl  8 Jun 2004 13:54:53 -0000       1.16.2.4
  +++ junit-frames.xsl  25 Jun 2004 13:50:16 -0000      1.16.2.5
  @@ -1,6 +1,6 @@
   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="1.0"
       xmlns:lxslt="http://xml.apache.org/xslt";
  -    xmlns:redirect="org.apache.xalan.lib.Redirect"
  +    xmlns:redirect="http://xml.apache.org/xalan/redirect";
       xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
       extension-element-prefixes="redirect">
   <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
  
  
  
  No                   revision
  
  Index: junit-frames.xsl
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/junit-frames.xsl,v
  retrieving revision 1.16.2.4
  retrieving revision 1.16.2.5
  diff -u -r1.16.2.4 -r1.16.2.5
  --- junit-frames.xsl  8 Jun 2004 13:54:53 -0000       1.16.2.4
  +++ junit-frames.xsl  25 Jun 2004 13:50:16 -0000      1.16.2.5
  @@ -1,6 +1,6 @@
   <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; 
version="1.0"
       xmlns:lxslt="http://xml.apache.org/xslt";
  -    xmlns:redirect="org.apache.xalan.lib.Redirect"
  +    xmlns:redirect="http://xml.apache.org/xalan/redirect";
       xmlns:stringutils="xalan://org.apache.tools.ant.util.StringUtils"
       extension-element-prefixes="redirect">
   <xsl:output method="html" indent="yes" encoding="US-ASCII"/>
  
  
  
  1.1.2.1   +0 -0      ant/src/etc/junit-frames-xalan1.xsl
  
  Index: junit-frames-xalan1.xsl
  ===================================================================
  RCS file: /home/cvs/ant/src/etc/junit-frames-xalan1.xsl,v
  retrieving revision 1.1
  retrieving revision 1.1.2.1
  diff -u -r1.1 -r1.1.2.1
  
  
  
  No                   revision
  No                   revision
  1.10.2.4  +27 -2     
ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java
  
  Index: Xalan1Executor.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan1Executor.java,v
  retrieving revision 1.10.2.3
  retrieving revision 1.10.2.4
  diff -u -r1.10.2.3 -r1.10.2.4
  --- Xalan1Executor.java       9 Feb 2004 22:12:34 -0000       1.10.2.3
  +++ Xalan1Executor.java       25 Jun 2004 13:50:16 -0000      1.10.2.4
  @@ -30,10 +30,35 @@
    * @ant.task ignore="true"
    */
   public class Xalan1Executor extends XalanExecutor {
  +
  +    private static final String xsltP = 
"org.apache.xalan.xslt.XSLTProcessor";
  +
  +    private XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
  +
  +    protected String getImplementation() {
  +        return processor.getClass().getName();
  +    }
  +
  +    protected String getProcVersion(String classNameImpl) 
  +        throws BuildException {
  +        try {
  +            // xalan 1
  +            if (classNameImpl.equals(xsltP)){
  +                return getXalanVersion(xsltP + "Version");
  +            }
  +            throw new BuildException("Could not find a valid processor 
version"
  +                                     + " implementation from " 
  +                                     + classNameImpl);
  +        } catch (ClassNotFoundException e){
  +            throw new BuildException("Could not find processor version "
  +                                     + "implementation", e);
  +        }
  +    }
  +
       void execute() throws Exception {
  -        XSLTProcessor processor = XSLTProcessorFactory.getProcessor();
           // need to quote otherwise it breaks because of "extra illegal 
tokens"
  -        processor.setStylesheetParam("output.dir", "'" + 
caller.toDir.getAbsolutePath() + "'");
  +        processor.setStylesheetParam("output.dir", "'" 
  +                                     + caller.toDir.getAbsolutePath() + "'");
           XSLTInputSource xml_src = new XSLTInputSource(caller.document);
           String system_id = caller.getStylesheetSystemId();
           XSLTInputSource xsl_src = new XSLTInputSource(system_id);
  
  
  
  1.7.2.4   +41 -1     
ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.java
  
  Index: Xalan2Executor.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/Xalan2Executor.java,v
  retrieving revision 1.7.2.3
  retrieving revision 1.7.2.4
  diff -u -r1.7.2.3 -r1.7.2.4
  --- Xalan2Executor.java       9 Feb 2004 22:12:34 -0000       1.7.2.3
  +++ Xalan2Executor.java       25 Jun 2004 13:50:16 -0000      1.7.2.4
  @@ -25,6 +25,8 @@
   import javax.xml.transform.stream.StreamResult;
   import javax.xml.transform.stream.StreamSource;
   
  +import org.apache.tools.ant.BuildException;
  +
   /**
    * Xalan executor via JAXP. Nothing special must exists in the classpath
    * besides of course, a parser, jaxp and xalan.
  @@ -32,8 +34,46 @@
    * @ant.task ignore="true"
    */
   public class Xalan2Executor extends XalanExecutor {
  +
  +    private static final String aPack = "org.apache.xalan.";
  +    private static final String sPack = "com.sun.org.apache.xalan.";
  +
  +    private TransformerFactory tfactory = TransformerFactory.newInstance();
  +
  +    protected String getImplementation() throws BuildException {
  +        return tfactory.getClass().getName();
  +    }
  +
  +    protected String getProcVersion(String classNameImpl) 
  +        throws BuildException {
  +        try {
  +            // xalan 2
  +            if (classNameImpl.equals(aPack + 
"processor.TransformerFactoryImpl") 
  +                ||
  +                classNameImpl.equals(aPack + "xslt.XSLTProcessorFactory")) {
  +                return getXalanVersion(aPack + 
"processor.XSLProcessorVersion");
  +            }
  +            // xalan xsltc
  +            if (classNameImpl.equals(aPack 
  +                                     + "xsltc.trax.TransformerFactoryImpl")){
  +                return getXSLTCVersion(aPack +"xsltc.ProcessorVersion");
  +            }
  +            // jdk 1.5 xsltc
  +            if (classNameImpl
  +                .equals(sPack + 
"internal.xsltc.trax.TransformerFactoryImpl")){
  +                return getXSLTCVersion(sPack 
  +                                       + "internal.xsltc.ProcessorVersion");
  +            }
  +            throw new BuildException("Could not find a valid processor 
version"
  +                                     + " implementation from " 
  +                                     + classNameImpl);
  +        } catch (ClassNotFoundException e){
  +            throw new BuildException("Could not find processor version "
  +                                     + "implementation", e);
  +        }
  +    }
  +
       void execute() throws Exception {
  -        TransformerFactory tfactory = TransformerFactory.newInstance();
           String system_id = caller.getStylesheetSystemId();
           Source xsl_src = new StreamSource(system_id);
           Transformer tformer = tfactory.newTransformer(xsl_src);
  
  
  
  1.11.2.5  +59 -36    
ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java
  
  Index: XalanExecutor.java
  ===================================================================
  RCS file: 
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/junit/XalanExecutor.java,v
  retrieving revision 1.11.2.4
  retrieving revision 1.11.2.5
  diff -u -r1.11.2.4 -r1.11.2.5
  --- XalanExecutor.java        2 Jun 2004 12:33:21 -0000       1.11.2.4
  +++ XalanExecutor.java        25 Jun 2004 13:50:16 -0000      1.11.2.5
  @@ -33,9 +33,12 @@
    * Command class that encapsulate specific behavior for each
    * Xalan version. The right executor will be instantiated at
    * runtime via class lookup. For instance, it will check first
  - * for Xalan2, then for Xalan1.
  + * for Xalan2/XSLTC, then for Xalan1.
    */
   abstract class XalanExecutor {
  +    private static final String pack = 
  +        "org.apache.tools.ant.taskdefs.optional.junit.";
  +
       /** the transformer caller */
       protected AggregateTransformer caller;
   
  @@ -45,7 +48,7 @@
       }
   
       /** get the appropriate stream based on the format (frames/noframes) */
  -    protected OutputStream getOutputStream() throws IOException {
  +    protected final OutputStream getOutputStream() throws IOException {
           if (AggregateTransformer.FRAMES.equals(caller.format)) {
               // dummy output for the framed report
               // it's all done by extension...
  @@ -66,53 +69,73 @@
        * @throws BuildException thrown if it could not find a valid xalan
        * executor.
        */
  -    static XalanExecutor newInstance(AggregateTransformer caller) throws 
BuildException {
  -        Class procVersion = null;
  +    static XalanExecutor newInstance(AggregateTransformer caller) 
  +        throws BuildException {
           XalanExecutor executor = null;
           try {
  -            procVersion = 
Class.forName("org.apache.xalan.processor.XSLProcessorVersion");
  -            executor = (XalanExecutor) Class.forName(
  -                
"org.apache.tools.ant.taskdefs.optional.junit.Xalan2Executor").newInstance();
  -        } catch (Exception xalan2missing) {
  -            StringWriter swr = new StringWriter();
  -            xalan2missing.printStackTrace(new PrintWriter(swr));
  -            caller.task.log("Didn't find Xalan2.", Project.MSG_DEBUG);
  -            caller.task.log(swr.toString(), Project.MSG_DEBUG);
  +            Class clazz = Class.forName(pack + "Xalan2Executor");
  +            executor = (XalanExecutor)clazz.newInstance();
  +        } catch (Exception xsltcApacheMissing){
  +            caller.task.log(xsltcApacheMissing.toString());
               try {
  -                procVersion = 
Class.forName("org.apache.xalan.xslt.XSLProcessorVersion");
  -                executor = (XalanExecutor) Class.forName(
  -                    
"org.apache.tools.ant.taskdefs.optional.junit.Xalan1Executor").newInstance();
  -            } catch (Exception xalan1missing) {
  -                swr = new StringWriter();
  -                xalan1missing.printStackTrace(new PrintWriter(swr));
  -                caller.task.log("Didn't find Xalan1.", Project.MSG_DEBUG);
  -                caller.task.log(swr.toString(), Project.MSG_DEBUG);
  -                String msg = "Could not find xalan2 nor xalan1 "
  -                    + "in the classpath. Check 
http://xml.apache.org/xalan-j/";;
  -                if (!JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)
  -                    && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_2)
  -                    && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_3)
  -                    && !JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_4)) {
  -                    msg += "\r\nStarting with JDK 1.5, the built-in 
processor "
  -                        + "of the JDK is no longer Xalan\r\nbut XSLTC which 
is "
  -                        + "not (yet) supported by the junitreport task.";
  -                }
  -                throw new BuildException(msg);
  +                Class clazz = Class.forName(pack + "Xalan1Executor");
  +                executor = (XalanExecutor) clazz.newInstance();
  +            } catch (Exception xalan1Missing){
  +                caller.task.log(xalan1Missing.toString());
  +                throw new BuildException("Could not find xstlc nor xalan2 
nor "
  +                                         + "xalan1 in the classpath. Check "
  +                                         + "http://xml.apache.org/xalan-j";);
               }
           }
  -        String version = getXalanVersion(procVersion);
  -        caller.task.log("Using Xalan version: " + version);
  +        String classNameImpl = executor.getImplementation();
  +        String version = executor.getProcVersion(classNameImpl);
  +        caller.task.log("Using " + version, Project.MSG_VERBOSE);
           executor.setCaller(caller);
           return executor;
       }
   
  +    /**
  +     * This methods should return the classname implementation of the
  +     * underlying xslt processor
  +     * @return the classname of the implementation, for example:
  +     * org.apache.xalan.processor.TransformerFactoryImpl
  +     * @see #getProcVersion(String)
  +     */
  +    protected abstract String getImplementation();
  +
  +    /**
  +     * Try to discover the xslt processor version based on the
  +     * className. There is nothing carved in stone and it can change
  +     * anytime, so this is just for the sake of giving additional
  +     * information if we can find it.
  +     * @param classNameImpl the classname of the underlying xslt processor
  +     * @return a string representing the implementation version.
  +     * @throws BuildException
  +     */
  +    protected abstract String getProcVersion(String classNameImpl) 
  +        throws BuildException;
  +
  +    /** a bit simplistic but xsltc data are conveniently private non final */
  +    protected final String getXSLTCVersion(String procVersionClassName) 
  +        throws ClassNotFoundException {
  +        // there's a convenient xsltc class version but data are
  +        // private so use package information
  +        Class procVersion = Class.forName(procVersionClassName);
  +        Package pkg = procVersion.getPackage();
  +        return pkg.getName() + " " + pkg.getImplementationTitle() 
  +            + " " + pkg.getImplementationVersion();
  +    }
  +
       /** pretty useful data (Xalan version information) to display. */
  -    private static String getXalanVersion(Class procVersion) {
  +    protected final String getXalanVersion(String procVersionClassName) 
  +        throws ClassNotFoundException {
  +        Class procVersion = Class.forName(procVersionClassName);
  +        String pkg = procVersion.getPackage().getName();
           try {
               Field f = procVersion.getField("S_VERSION");
  -            return f.get(null).toString();
  +            return pkg + " " + f.get(null).toString();
           } catch (Exception e) {
  -            return "?";
  +            return pkg + " ?.?";
           }
       }
   }
  
  
  
  No                   revision
  No                   revision
  1.38.2.14 +2 -3      ant/xdocs/faq.xml
  
  Index: faq.xml
  ===================================================================
  RCS file: /home/cvs/ant/xdocs/faq.xml,v
  retrieving revision 1.38.2.13
  retrieving revision 1.38.2.14
  diff -u -r1.38.2.13 -r1.38.2.14
  --- faq.xml   2 Jun 2004 12:33:21 -0000       1.38.2.13
  +++ faq.xml   25 Jun 2004 13:50:16 -0000      1.38.2.14
  @@ -1486,9 +1486,8 @@
           href="http://xml.apache.org/xalan-j/";>Xalan-J 2</a> in order
           to use this task with JDK 1.5.</p>
   
  -        <p>If you want to follow progress on this, <a
  -        
href="http://issues.apache.org/bugzilla/show_bug.cgi?id=27541";>here</a>
  -        is the relevant bug report.</p>
  +        <p>Starting with Ant 1.6.2 <code>&lt;junitreport&gt;</code>
  +        will support JDK 1.5.</p>
   
         </answer>
       </faq>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to