sbailliez    2002/06/26 16:14:31

  Modified:    src/main/org/apache/tools/ant Tag: ANT_15_BRANCH Main.java
                        Diagnostics.java
  Log:
  Adding a diagnostic mode to the Ant command line
  via -diagnostics that will generate a report on
  the console and give some bare information that
  may help in solving problems quickly.
  
  Note that Ant will now break immediately if the
  implementation version of optional.jar
  (if available) and ant.jar do not match exactly.
  (The check will occur for JDK 1.2+ only)
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.65.2.5  +4 -1      jakarta-ant/src/main/org/apache/tools/ant/Main.java
  
  Index: Main.java
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/Main.java,v
  retrieving revision 1.65.2.4
  retrieving revision 1.65.2.5
  diff -u -r1.65.2.4 -r1.65.2.5
  --- Main.java 12 Jun 2002 15:31:39 -0000      1.65.2.4
  +++ Main.java 26 Jun 2002 23:14:31 -0000      1.65.2.5
  @@ -176,6 +176,7 @@
           Main m = null;
   
           try {
  +            Diagnostics.validateVersion();
               m = new Main(args);
           } catch (Throwable exc) {
               printMessage(exc);
  @@ -263,6 +264,9 @@
               } else if (arg.equals("-version")) {
                   printVersion();
                   return;
  +            } else if (arg.equals("-diagnostics")){
  +                Diagnostics.doReport(System.out);
  +                return;
               } else if (arg.equals("-quiet") || arg.equals("-q")) {
                   msgOutputLevel = Project.MSG_WARN;
               } else if (arg.equals("-verbose") || arg.equals("-v")) {
  @@ -784,7 +788,6 @@
                   props.load(in);
                   in.close();
   
  -                String lSep = System.getProperty("line.separator");
                   StringBuffer msg = new StringBuffer();
                   msg.append("Apache Ant version ");
                   msg.append(props.getProperty("VERSION"));
  
  
  
  1.1.2.2   +72 -34    
jakarta-ant/src/main/org/apache/tools/ant/Attic/Diagnostics.java
  
  Index: Diagnostics.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-ant/src/main/org/apache/tools/ant/Attic/Diagnostics.java,v
  retrieving revision 1.1.2.1
  retrieving revision 1.1.2.2
  diff -u -r1.1.2.1 -r1.1.2.2
  --- Diagnostics.java  26 Jun 2002 08:42:05 -0000      1.1.2.1
  +++ Diagnostics.java  26 Jun 2002 23:14:31 -0000      1.1.2.2
  @@ -55,48 +55,59 @@
   
   import java.io.File;
   import java.io.FilenameFilter;
  -import java.io.PrintWriter;
   import java.io.PrintStream;
   import java.util.Enumeration;
   import java.lang.reflect.Method;
   import java.lang.reflect.InvocationTargetException;
   
  +import org.apache.tools.ant.util.JavaEnvUtils;
  +
   /**
  - * A little diagnostic helper that output some information
  - * that may help in support.
  + * A little diagnostic helper that output some information that may help
  + * in support. It should quickly give correct information about the
  + * jar existing in ant.home/lib and the jar versions...
    *
    * @since Ant 1.5
    * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Bailliez</a>
    */
  -public class Diagnostics {
  +public final class Diagnostics {
  +
  +    /** utility class */
  +    private Diagnostics(){
  +    }
   
       /**
  -     * Check if optional tasks are available and if they are implementation
  -     * version identical with core.
  -     * @return <tt>true</tt> if optional tasks are available and 
implementation
  -     * version is correct. <tt>false</tt> if optional tasks are not 
available.
  -     * @throws BuildException if the implementation version of optional tasks
  -     * does not match the core implementation version.
  +     * Check if optional tasks are available. Not that it does not check
  +     * for implementation version. Use <tt>validateVersion()</tt> for this.
  +     * @return <tt>true</tt> if optional tasks are available.
        */
       public static boolean isOptionalAvailable() {
  -        Class optional = null;
           try {
  -            optional = 
Class.forName("org.apache.tools.ant.taskdefs.optional.Test");
  +            Class.forName("org.apache.tools.ant.taskdefs.optional.Test");
           } catch (ClassNotFoundException e){
               return false;
           }
  +        return true;
  +    }
   
  -        Package corePkg = Main.class.getPackage();
  -        String coreVersion = corePkg.getImplementationVersion();
  -        Package optionalPkg = optional.getPackage();
  -        String optionalVersion = optionalPkg.getImplementationVersion();
  -        if (coreVersion == null || !coreVersion.equals(optionalVersion) ){
  -            throw new BuildException(
  -                    "Invalid implementation version between Ant core and Ant 
optional tasks.\n" +
  -                    " core    : " + corePkg + "\n" +
  -                    " optional: " + optionalPkg);
  +    /**
  +     * Check if core and optional implementation version do match.
  +     * @throws BuildException if the implementation version of optional tasks
  +     * does not match the core implementation version.
  +     */
  +    public static void validateVersion() throws BuildException {
  +        try {
  +            Class optional = 
Class.forName("org.apache.tools.ant.taskdefs.optional.Test");
  +            String coreVersion = getImplementationVersion(Main.class);
  +            String optionalVersion = getImplementationVersion(optional);
  +            if (coreVersion == null || !coreVersion.equals(optionalVersion) 
){
  +                throw new BuildException(
  +                        "Invalid implementation version between Ant core and 
Ant optional tasks.\n" +
  +                        " core    : " + coreVersion + "\n" +
  +                        " optional: " + optionalVersion);
  +            }
  +        } catch (ClassNotFoundException e){
           }
  -        return true;
       }
   
       /**
  @@ -113,37 +124,64 @@
                   return name.endsWith(".jar");
               }
           };
  -        return libDir.listFiles(filter);
  +        // listFiles is JDK 1.2+ method...
  +        String[] filenames = libDir.list(filter);
  +        File[] files = new File[filenames.length];
  +        for (int i = 0; i < filenames.length; i++){
  +            files[i] = new File(libDir, filenames[i]);
  +        }
  +        return files;
       }
   
  -
  +    /**
  +     * main entry point for command line
  +     * @param args command line arguments.
  +     */
       public static void main(String[] args){
           doReport(System.out);
       }
   
   
       /**
  -     *
  +     * Helper method to get the implementation version.
  +     * @param clazz the class to get the information from.
  +     * @return null if there is no package or implementation version.
  +     * '?.?' for JDK 1.0 or 1.1.
  +     */
  +    private static String getImplementationVersion(Class clazz){
  +        if (JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_0)
  +            || JavaEnvUtils.isJavaVersion(JavaEnvUtils.JAVA_1_1)){
  +                return "?.?";
  +        }
  +        Package pkg = clazz.getPackage();
  +        if (pkg != null) {
  +            return pkg.getImplementationVersion();
  +        }
  +        return null;
  +    }
  +
  +    /**
  +     * Print a report to the given stream.
  +     * @param out the stream to print the report to.
        */
       public static void doReport(PrintStream out){
           out.println("------- Ant diagnostics report -------");
           out.println(Main.getAntVersion());
           out.println();
           out.println("-------------------------------------------");
  -        out.println(" Implementation Version");
  +        out.println(" Implementation Version (JDK1.2+ only)");
           out.println("-------------------------------------------");
  -        out.println(" core tasks     : " + 
Main.class.getPackage().getImplementationVersion());
  +        out.println(" core tasks     : " + 
getImplementationVersion(Main.class));
   
  +        Class optional = null;
           try {
  -            Class.forName(
  +            optional = Class.forName(
                       "org.apache.tools.ant.taskdefs.optional.Test");
  +            out.println(" optional tasks : " + 
getImplementationVersion(optional));
           } catch (ClassNotFoundException e){
  +            out.println(" optional tasks : not available");
           }
   
  -        Package optionalPkg = 
Package.getPackage("org.apache.tools.ant.taskdefs.optional");
  -        out.println(" optional tasks : " +
  -                (optionalPkg == null ? "not available": 
optionalPkg.getImplementationVersion()) );
  -
           out.println();
           out.println("-------------------------------------------");
           out.println(" ANT_HOME/lib jar listing");
  @@ -162,10 +200,10 @@
               out.println("-------------------------------------------");
               Class which = Class.forName("org.apache.env.Which");
               Method method = which.getMethod("main", new Class[]{ 
String[].class });
  -            method.invoke(null, new String[]{});
  +            method.invoke(null, new Object[]{new String[]{}});
           } catch (ClassNotFoundException e) {
               out.println("Not available.");
  -            out.println("For detailed XML related diagnostics, get Which 
from http://xml.apache.org/commons/";);
  +            out.println("Download it at http://xml.apache.org/commons/";);
           } catch (InvocationTargetException e) {
               error = e.getTargetException() == null ? e : 
e.getTargetException();
           } catch (Exception e) {
  
  
  

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

Reply via email to