📄 diagnostics.java
字号:
*/ private static void doReportSystemProperties(PrintStream out) { Properties sysprops = null; try { sysprops = System.getProperties(); } catch (SecurityException e) { ignoreThrowable(e); out.println("Access to System.getProperties() blocked " + "by a security manager"); } for (Enumeration keys = sysprops.propertyNames(); keys.hasMoreElements();) { String key = (String) keys.nextElement(); String value = getProperty(key); out.println(key + " : " + value); } } /** * Get the value of a system property. If a security manager * blocks access to a property it fills the result in with an error * @param key * @return the system property's value or error text * @see #ERROR_PROPERTY_ACCESS_BLOCKED */ private static String getProperty(String key) { String value; try { value = System.getProperty(key); } catch (SecurityException e) { value = ERROR_PROPERTY_ACCESS_BLOCKED; } return value; } /** * Report the content of ANT_HOME/lib directory * @param out the stream to print the content to */ private static void doReportAntProperties(PrintStream out) { Project p = new Project(); p.initProperties(); out.println(MagicNames.ANT_VERSION + ": " + p.getProperty(MagicNames.ANT_VERSION)); out.println(MagicNames.ANT_JAVA_VERSION + ": " + p.getProperty(MagicNames.ANT_JAVA_VERSION)); out.println(MagicNames.ANT_LIB + ": " + p.getProperty(MagicNames.ANT_LIB)); out.println(MagicNames.ANT_HOME + ": " + p.getProperty(MagicNames.ANT_HOME)); } /** * Report the content of ANT_HOME/lib directory * @param out the stream to print the content to */ private static void doReportAntHomeLibraries(PrintStream out) { out.println(MagicNames.ANT_HOME + ": " + System.getProperty(MagicNames.ANT_HOME)); File[] libs = listLibraries(); printLibraries(libs, out); } /** * Report the content of ~/.ant/lib directory * * @param out the stream to print the content to */ private static void doReportUserHomeLibraries(PrintStream out) { String home = System.getProperty(Launcher.USER_HOMEDIR); out.println("user.home: " + home); File libDir = new File(home, Launcher.USER_LIBDIR); File[] libs = listJarFiles(libDir); printLibraries(libs, out); } /** * list the libraries * @param libs array of libraries (can be null) * @param out output stream */ private static void printLibraries(File[] libs, PrintStream out) { if (libs == null) { out.println("No such directory."); return; } for (int i = 0; i < libs.length; i++) { out.println(libs[i].getName() + " (" + libs[i].length() + " bytes)"); } } /** * Call org.apache.env.Which if available * @param out the stream to print the content to. */ private static void doReportWhich(PrintStream out) { Throwable error = null; try { Class which = Class.forName("org.apache.env.Which"); Method method = which.getMethod("main", new Class[]{String[].class}); method.invoke(null, new Object[]{new String[]{}}); } catch (ClassNotFoundException e) { out.println("Not available."); out.println("Download it at http://xml.apache.org/commons/"); } catch (InvocationTargetException e) { error = e.getTargetException() == null ? e : e.getTargetException(); } catch (Throwable e) { error = e; } // report error if something weird happens...this is diagnostic. if (error != null) { out.println("Error while running org.apache.env.Which"); error.printStackTrace(); } } /** * Create a report about non-available tasks that are defined in the * mapping but could not be found via lookup. It might generally happen * because Ant requires multiple libraries to compile and one of them * was missing when compiling Ant. * @param out the stream to print the tasks report to * <tt>null</tt> for a missing stream (ie mapping). */ private static void doReportTasksAvailability(PrintStream out) { InputStream is = Main.class.getResourceAsStream( MagicNames.TASKDEF_PROPERTIES_RESOURCE); if (is == null) { out.println("None available"); } else { Properties props = new Properties(); try { props.load(is); for (Enumeration keys = props.keys(); keys.hasMoreElements();) { String key = (String) keys.nextElement(); String classname = props.getProperty(key); try { Class.forName(classname); props.remove(key); } catch (ClassNotFoundException e) { out.println(key + " : Not Available " + "(the implementation class is not present)"); } catch (NoClassDefFoundError e) { String pkg = e.getMessage().replace('/', '.'); out.println(key + " : Missing dependency " + pkg); } catch (LinkageError e) { out.println(key + " : Initialization error"); } } if (props.size() == 0) { out.println("All defined tasks are available"); } else { out.println("A task being missing/unavailable should only " + "matter if you are trying to use it"); } } catch (IOException e) { out.println(e.getMessage()); } } } /** * tell the user about the XML parser * @param out */ private static void doReportParserInfo(PrintStream out) { String parserName = getXmlParserName(); String parserLocation = getXMLParserLocation(); printParserInfo(out, "XML Parser", parserName, parserLocation); printParserInfo(out, "Namespace-aware parser", getNamespaceParserName(), getNamespaceParserLocation()); } private static void printParserInfo(PrintStream out, String parserType, String parserName, String parserLocation) { if (parserName == null) { parserName = "unknown"; } if (parserLocation == null) { parserLocation = "unknown"; } out.println(parserType + " : " + parserName); out.println(parserType + " Location: " + parserLocation); } /** * try and create a temp file in our temp dir; this * checks that it has space and access. * We also do some clock reporting. * @param out */ private static void doReportTempDir(PrintStream out) { String tempdir = System.getProperty("java.io.tmpdir"); if (tempdir == null) { out.println("Warning: java.io.tmpdir is undefined"); return; } out.println("Temp dir is " + tempdir); File tempDirectory = new File(tempdir); if (!tempDirectory.exists()) { out.println("Warning, java.io.tmpdir directory does not exist: " + tempdir); return; } //create the file long now = System.currentTimeMillis(); File tempFile = null; FileOutputStream fileout = null; try { tempFile = File.createTempFile("diag", "txt", tempDirectory); //do some writing to it fileout = new FileOutputStream(tempFile); byte[] buffer = new byte[KILOBYTE]; for (int i = 0; i < TEST_FILE_SIZE; i++) { fileout.write(buffer); } fileout.close(); fileout = null; long filetime = tempFile.lastModified(); tempFile.delete(); out.println("Temp dir is writeable"); long drift = filetime - now; out.println("Temp dir alignment with system clock is " + drift + " ms"); if (Math.abs(drift) > BIG_DRIFT_LIMIT) { out.println("Warning: big clock drift -maybe a network filesystem"); } } catch (IOException e) { ignoreThrowable(e); out.println("Failed to create a temporary file in the temp dir " + tempdir); out.println("File " + tempFile + " could not be created/written to"); } finally { FileUtils.close(fileout); if (tempFile != null && tempFile.exists()) { tempFile.delete(); } } } /** * Report locale information * @param out stream to print to */ private static void doReportLocale(PrintStream out) { //calendar stuff. Calendar cal = Calendar.getInstance(); TimeZone tz = cal.getTimeZone(); out.println("Timezone " + tz.getDisplayName() + " offset=" + tz.getOffset(cal.get(Calendar.ERA), cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.DAY_OF_WEEK), ((cal.get(Calendar.HOUR_OF_DAY) * MINUTES_PER_HOUR + cal.get(Calendar.MINUTE)) * SECONDS_PER_MINUTE + cal.get(Calendar.SECOND)) * SECONDS_PER_MILLISECOND + cal.get(Calendar.MILLISECOND))); } /** * print a property name="value" pair if the property is set; * print nothing if it is null * @param out stream to print on * @param key property name */ private static void printProperty(PrintStream out, String key) { String value = getProperty(key); if (value != null) { out.print(key); out.print(" = "); out.print('"'); out.print(value); out.println('"'); } } /** * Report proxy information * * @param out stream to print to * @since Ant1.7 */ private static void doReportProxy(PrintStream out) { printProperty(out, ProxySetup.HTTP_PROXY_HOST); printProperty(out, ProxySetup.HTTP_PROXY_PORT); printProperty(out, ProxySetup.HTTP_PROXY_USERNAME); printProperty(out, ProxySetup.HTTP_PROXY_PASSWORD); printProperty(out, ProxySetup.HTTP_NON_PROXY_HOSTS); printProperty(out, ProxySetup.HTTPS_PROXY_HOST); printProperty(out, ProxySetup.HTTPS_PROXY_PORT); printProperty(out, ProxySetup.HTTPS_NON_PROXY_HOSTS); printProperty(out, ProxySetup.FTP_PROXY_HOST); printProperty(out, ProxySetup.FTP_PROXY_PORT); printProperty(out, ProxySetup.FTP_NON_PROXY_HOSTS); printProperty(out, ProxySetup.SOCKS_PROXY_HOST); printProperty(out, ProxySetup.SOCKS_PROXY_PORT); printProperty(out, ProxySetup.SOCKS_PROXY_USERNAME); printProperty(out, ProxySetup.SOCKS_PROXY_PASSWORD); if (JavaEnvUtils.getJavaVersionNumber() < 15) { return; } printProperty(out, ProxySetup.USE_SYSTEM_PROXIES); final String proxyDiagClassname = "org.apache.tools.ant.util.java15.ProxyDiagnostics"; try { Class proxyDiagClass = Class.forName(proxyDiagClassname); Object instance = proxyDiagClass.newInstance(); out.println("Java1.5+ proxy settings:"); out.println(instance.toString()); } catch (ClassNotFoundException e) { //not included, do nothing } catch (IllegalAccessException e) { //not included, do nothing } catch (InstantiationException e) { //not included, do nothing } catch (NoClassDefFoundError e) { // not included, to nothing } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -