⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 diagnostics.java

📁 Use the links below to download a source distribution of Ant from one of our mirrors. It is good pra
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* *  Licensed to the Apache Software Foundation (ASF) under one or more *  contributor license agreements.  See the NOTICE file distributed with *  this work for additional information regarding copyright ownership. *  The ASF licenses this file to You 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. * */package org.apache.tools.ant;import org.apache.tools.ant.util.LoaderUtils;import org.apache.tools.ant.util.FileUtils;import org.apache.tools.ant.util.JAXPUtils;import org.apache.tools.ant.util.ProxySetup;import org.apache.tools.ant.util.JavaEnvUtils;import org.apache.tools.ant.launch.Launcher;import org.xml.sax.XMLReader;import javax.xml.parsers.SAXParserFactory;import javax.xml.parsers.SAXParser;import java.io.File;import java.io.FilenameFilter;import java.io.PrintStream;import java.io.InputStream;import java.io.IOException;import java.io.FileOutputStream;import java.util.Enumeration;import java.util.Properties;import java.util.Calendar;import java.util.TimeZone;import java.lang.reflect.Method;import java.lang.reflect.InvocationTargetException;/** * 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 */public final class Diagnostics {    /**     * value for which a difference between clock and temp file time triggers     * a warning.     * {@value}     */    private static final int BIG_DRIFT_LIMIT = 10000;    /**     * How big a test file to write.     * {@value}     */    private static final int TEST_FILE_SIZE = 32;    private static final int KILOBYTE = 1024;    private static final int SECONDS_PER_MILLISECOND = 1000;    private static final int SECONDS_PER_MINUTE = 60;    private static final int MINUTES_PER_HOUR = 60;    private static final String TEST_CLASS        = "org.apache.tools.ant.taskdefs.optional.Test";    /**     * The error text when a security manager blocks access to a property.     * {@value}     */    protected static final String ERROR_PROPERTY_ACCESS_BLOCKED        = "Access to this property blocked by a security manager";    /** utility class */    private Diagnostics() {        // hidden constructor    }    /**     * 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() {        try {            Class.forName(TEST_CLASS);        } catch (ClassNotFoundException e) {            return false;        }        return true;    }    /**     * 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(TEST_CLASS);            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) {            // ignore            ignoreThrowable(e);        }    }    /**     * return the list of jar files existing in ANT_HOME/lib     * and that must have been picked up by Ant script.     * @return the list of jar files existing in ant.home/lib or     * <tt>null</tt> if an error occurs.     */    public static File[] listLibraries() {        String home = System.getProperty(MagicNames.ANT_HOME);        if (home == null) {            return null;        }        File libDir = new File(home, "lib");        return listJarFiles(libDir);    }    /**     * get a list of all JAR files in a directory     * @param libDir directory     * @return array of files (or null for no such directory)     */    private static File[] listJarFiles(File libDir) {        FilenameFilter filter = new FilenameFilter() {            public boolean accept(File dir, String name) {                return name.endsWith(".jar");            }        };        File[] files  = libDir.listFiles(filter);        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) {        Package pkg = clazz.getPackage();        return pkg.getImplementationVersion();    }    /**     * what parser are we using.     * @return the classname of the parser     */    private static String getXmlParserName() {        SAXParser saxParser = getSAXParser();        if (saxParser == null) {            return "Could not create an XML Parser";        }        // check to what is in the classname        String saxParserName = saxParser.getClass().getName();        return saxParserName;    }    /**     * Create a JAXP SAXParser     * @return parser or null for trouble     */    private static SAXParser getSAXParser() {        SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();        if (saxParserFactory == null) {            return null;        }        SAXParser saxParser = null;        try {            saxParser = saxParserFactory.newSAXParser();        } catch (Exception e) {            // ignore            ignoreThrowable(e);        }        return saxParser;    }    /**     * get the location of the parser     * @return path or null for trouble in tracking it down     */    private static String getXMLParserLocation() {        SAXParser saxParser = getSAXParser();        if (saxParser == null) {            return null;        }        String location = getClassLocation(saxParser.getClass());        return location;    }    private static String getNamespaceParserName() {        try {            XMLReader reader = JAXPUtils.getNamespaceXMLReader();            return reader.getClass().getName();        } catch (BuildException e) {            //ignore            ignoreThrowable(e);            return null;        }    }    private static String getNamespaceParserLocation() {        try {            XMLReader reader = JAXPUtils.getNamespaceXMLReader();            return getClassLocation(reader.getClass());        } catch (BuildException e) {            //ignore            ignoreThrowable(e);            return null;        }    }    /**     * ignore exceptions. This is to allow future     * implementations to log at a verbose level     * @param thrown     */    private static void ignoreThrowable(Throwable thrown) {    }    /**     * get the location of a class. Stolen from axis/webapps/happyaxis.jsp     * @param clazz     * @return the jar file or path where a class was found, or null     */    private static String getClassLocation(Class clazz) {        File f = LoaderUtils.getClassSource(clazz);        return f == null ? null : f.getAbsolutePath();    }    /**     * 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());        header(out, "Implementation Version");        out.println("core tasks     : " + getImplementationVersion(Main.class));        Class optional = null;        try {            optional = Class.forName(TEST_CLASS);            out.println("optional tasks : "                + getImplementationVersion(optional));        } catch (ClassNotFoundException e) {            ignoreThrowable(e);            out.println("optional tasks : not available");        }        header(out, "ANT PROPERTIES");        doReportAntProperties(out);        header(out, "ANT_HOME/lib jar listing");        doReportAntHomeLibraries(out);        header(out, "USER_HOME/.ant/lib jar listing");        doReportUserHomeLibraries(out);        header(out, "Tasks availability");        doReportTasksAvailability(out);        header(out, "org.apache.env.Which diagnostics");        doReportWhich(out);        header(out, "XML Parser information");        doReportParserInfo(out);        header(out, "System properties");        doReportSystemProperties(out);        header(out, "Temp dir");        doReportTempDir(out);        header(out, "Locale information");        doReportLocale(out);        header(out, "Proxy information");        doReportProxy(out);        out.println();    }    private static void header(PrintStream out, String section) {        out.println();        out.println("-------------------------------------------");        out.print(" ");        out.println(section);        out.println("-------------------------------------------");    }    /**     * Report a listing of system properties existing in the current vm.     * @param out the stream to print the properties to.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -