git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@370259 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -165,6 +165,7 @@ | |||||
| <selector id="needs.jdk1.5+"> | <selector id="needs.jdk1.5+"> | ||||
| <or> | <or> | ||||
| <filename name="${taskdefs.package}/AptTest*"/> | <filename name="${taskdefs.package}/AptTest*"/> | ||||
| <filename name="${util.package}/java15/*"/> | |||||
| </or> | </or> | ||||
| </selector> | </selector> | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Copyright 2002-2005 The Apache Software Foundation | |||||
| * Copyright 2002-2006 The Apache Software Foundation | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -19,6 +19,8 @@ package org.apache.tools.ant; | |||||
| import org.apache.tools.ant.util.LoaderUtils; | import org.apache.tools.ant.util.LoaderUtils; | ||||
| import org.apache.tools.ant.util.FileUtils; | import org.apache.tools.ant.util.FileUtils; | ||||
| import org.apache.tools.ant.util.JAXPUtils; | 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.apache.tools.ant.launch.Launcher; | ||||
| import org.xml.sax.XMLReader; | import org.xml.sax.XMLReader; | ||||
| @@ -285,6 +287,10 @@ public final class Diagnostics { | |||||
| header(out, "Locale information"); | header(out, "Locale information"); | ||||
| doReportLocale(out); | doReportLocale(out); | ||||
| header(out, "Proxy information"); | |||||
| doReportProxy(out); | |||||
| out.println(); | out.println(); | ||||
| } | } | ||||
| @@ -413,7 +419,8 @@ public final class Diagnostics { | |||||
| Class.forName(classname); | Class.forName(classname); | ||||
| props.remove(key); | props.remove(key); | ||||
| } catch (ClassNotFoundException e) { | } catch (ClassNotFoundException e) { | ||||
| out.println(key + " : Not Available"); | |||||
| out.println(key + " : Not Available " | |||||
| + "(the implementation class is not present)"); | |||||
| } catch (NoClassDefFoundError e) { | } catch (NoClassDefFoundError e) { | ||||
| String pkg = e.getMessage().replace('/', '.'); | String pkg = e.getMessage().replace('/', '.'); | ||||
| out.println(key + " : Missing dependency " + pkg); | out.println(key + " : Missing dependency " + pkg); | ||||
| @@ -423,6 +430,9 @@ public final class Diagnostics { | |||||
| } | } | ||||
| if (props.size() == 0) { | if (props.size() == 0) { | ||||
| out.println("All defined tasks are available"); | 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) { | } catch (IOException e) { | ||||
| out.println(e.getMessage()); | out.println(e.getMessage()); | ||||
| @@ -494,7 +504,7 @@ public final class Diagnostics { | |||||
| tempFile.delete(); | tempFile.delete(); | ||||
| out.println("Temp dir is writeable"); | out.println("Temp dir is writeable"); | ||||
| long drift = filetime - now; | long drift = filetime - now; | ||||
| out.println("temp dir alignment with system clock is " + drift + " ms"); | |||||
| out.println("Temp dir alignment with system clock is " + drift + " ms"); | |||||
| if (Math.abs(drift) > BIG_DRIFT_LIMIT) { | if (Math.abs(drift) > BIG_DRIFT_LIMIT) { | ||||
| out.println("Warning: big clock drift -maybe a network filesystem"); | out.println("Warning: big clock drift -maybe a network filesystem"); | ||||
| } | } | ||||
| @@ -513,7 +523,7 @@ public final class Diagnostics { | |||||
| /** | /** | ||||
| * Report locale information | * Report locale information | ||||
| * @param out | |||||
| * @param out stream to print to | |||||
| */ | */ | ||||
| private static void doReportLocale(PrintStream out) { | private static void doReportLocale(PrintStream out) { | ||||
| //calendar stuff. | //calendar stuff. | ||||
| @@ -530,4 +540,67 @@ public final class Diagnostics { | |||||
| + cal.get(Calendar.SECOND)) * SECONDS_PER_MILLISECOND | + cal.get(Calendar.SECOND)) * SECONDS_PER_MILLISECOND | ||||
| + cal.get(Calendar.MILLISECOND))); | + cal.get(Calendar.MILLISECOND))); | ||||
| } | } | ||||
| /** | |||||
| * print a property name="value" pair, or name=[undefined] if there is none | |||||
| * @param out | |||||
| * @param name | |||||
| */ | |||||
| private static void printProperty(PrintStream out,String name) { | |||||
| out.print(name); | |||||
| out.print(" = "); | |||||
| String value=System.getProperty(name); | |||||
| if(value!=null) { | |||||
| out.print('"'); | |||||
| out.print(value); | |||||
| out.println('"'); | |||||
| } else { | |||||
| out.println("[undefined]"); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * Report proxy information | |||||
| * | |||||
| * @param out stream to print to | |||||
| */ | |||||
| private static void doReportProxy(PrintStream out) { | |||||
| if(JavaEnvUtils.getJavaVersionNumber()>=15) { | |||||
| printProperty(out, ProxySetup.USE_SYSTEM_PROXIES); | |||||
| } | |||||
| 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); | |||||
| 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 | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Copyright 2000-2005 The Apache Software Foundation | |||||
| * Copyright 2000-2006 The Apache Software Foundation | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -22,6 +22,7 @@ import java.util.Properties; | |||||
| import org.apache.tools.ant.BuildException; | import org.apache.tools.ant.BuildException; | ||||
| import org.apache.tools.ant.Project; | import org.apache.tools.ant.Project; | ||||
| import org.apache.tools.ant.Task; | import org.apache.tools.ant.Task; | ||||
| import org.apache.tools.ant.util.ProxySetup; | |||||
| /** | /** | ||||
| * Sets Java's web proxy properties, so that tasks and code run in | * Sets Java's web proxy properties, so that tasks and code run in | ||||
| @@ -178,32 +179,32 @@ public class SetProxy extends Task { | |||||
| if (proxyHost.length() != 0) { | if (proxyHost.length() != 0) { | ||||
| traceSettingInfo(); | traceSettingInfo(); | ||||
| enablingProxy = true; | enablingProxy = true; | ||||
| sysprops.put("http.proxyHost", proxyHost); | |||||
| sysprops.put(ProxySetup.HTTP_PROXY_HOST, proxyHost); | |||||
| String portString = Integer.toString(proxyPort); | String portString = Integer.toString(proxyPort); | ||||
| sysprops.put("http.proxyPort", portString); | |||||
| sysprops.put("https.proxyHost", proxyHost); | |||||
| sysprops.put("https.proxyPort", portString); | |||||
| sysprops.put("ftp.proxyHost", proxyHost); | |||||
| sysprops.put("ftp.proxyPort", portString); | |||||
| sysprops.put(ProxySetup.HTTP_PROXY_PORT, portString); | |||||
| sysprops.put(ProxySetup.HTTPS_PROXY_HOST, proxyHost); | |||||
| sysprops.put(ProxySetup.HTTPS_PROXY_PORT, portString); | |||||
| sysprops.put(ProxySetup.FTP_PROXY_HOST, proxyHost); | |||||
| sysprops.put(ProxySetup.FTP_PROXY_PORT, portString); | |||||
| if (nonProxyHosts != null) { | if (nonProxyHosts != null) { | ||||
| sysprops.put("http.nonProxyHosts", nonProxyHosts); | |||||
| sysprops.put("https.nonProxyHosts", nonProxyHosts); | |||||
| sysprops.put("ftp.nonProxyHosts", nonProxyHosts); | |||||
| sysprops.put(ProxySetup.HTTP_NON_PROXY_HOSTS, nonProxyHosts); | |||||
| sysprops.put(ProxySetup.HTTPS_NON_PROXY_HOSTS, nonProxyHosts); | |||||
| sysprops.put(ProxySetup.FTP_NON_PROXY_HOSTS, nonProxyHosts); | |||||
| } | } | ||||
| if (proxyUser != null) { | if (proxyUser != null) { | ||||
| sysprops.put("http.proxyUser", proxyUser); | |||||
| sysprops.put("http.proxyPassword", proxyPassword); | |||||
| sysprops.put(ProxySetup.HTTP_PROXY_USERNAME, proxyUser); | |||||
| sysprops.put(ProxySetup.HTTP_PROXY_PASSWORD, proxyPassword); | |||||
| } | } | ||||
| } else { | } else { | ||||
| log("resetting http proxy", Project.MSG_VERBOSE); | log("resetting http proxy", Project.MSG_VERBOSE); | ||||
| sysprops.remove("http.proxyHost"); | |||||
| sysprops.remove("http.proxyPort"); | |||||
| sysprops.remove("http.proxyUser"); | |||||
| sysprops.remove("http.proxyPassword"); | |||||
| sysprops.remove("https.proxyHost"); | |||||
| sysprops.remove("https.proxyPort"); | |||||
| sysprops.remove("ftp.proxyHost"); | |||||
| sysprops.remove("ftp.proxyPort"); | |||||
| sysprops.remove(ProxySetup.HTTP_PROXY_HOST); | |||||
| sysprops.remove(ProxySetup.HTTP_PROXY_PORT); | |||||
| sysprops.remove(ProxySetup.HTTP_PROXY_USERNAME); | |||||
| sysprops.remove(ProxySetup.HTTP_PROXY_PASSWORD); | |||||
| sysprops.remove(ProxySetup.HTTPS_PROXY_HOST); | |||||
| sysprops.remove(ProxySetup.HTTPS_PROXY_PORT); | |||||
| sysprops.remove(ProxySetup.FTP_PROXY_HOST); | |||||
| sysprops.remove(ProxySetup.FTP_PROXY_PORT); | |||||
| } | } | ||||
| } | } | ||||
| @@ -212,20 +213,20 @@ public class SetProxy extends Task { | |||||
| settingsChanged = true; | settingsChanged = true; | ||||
| if (socksProxyHost.length() != 0) { | if (socksProxyHost.length() != 0) { | ||||
| enablingProxy = true; | enablingProxy = true; | ||||
| sysprops.put("socksProxyHost", socksProxyHost); | |||||
| sysprops.put("socksProxyPort", Integer.toString(socksProxyPort)); | |||||
| sysprops.put(ProxySetup.SOCKS_PROXY_HOST, socksProxyHost); | |||||
| sysprops.put(ProxySetup.SOCKS_PROXY_PORT, Integer.toString(socksProxyPort)); | |||||
| if (proxyUser != null) { | if (proxyUser != null) { | ||||
| //this may be a java1.4 thingy only | //this may be a java1.4 thingy only | ||||
| sysprops.put("java.net.socks.username", proxyUser); | |||||
| sysprops.put("java.net.socks.password", proxyPassword); | |||||
| sysprops.put(ProxySetup.SOCKS_PROXY_USERNAME, proxyUser); | |||||
| sysprops.put(ProxySetup.SOCKS_PROXY_PASSWORD, proxyPassword); | |||||
| } | } | ||||
| } else { | } else { | ||||
| log("resetting socks proxy", Project.MSG_VERBOSE); | log("resetting socks proxy", Project.MSG_VERBOSE); | ||||
| sysprops.remove("socksProxyHost"); | |||||
| sysprops.remove("socksProxyPort"); | |||||
| sysprops.remove("java.net.socks.username"); | |||||
| sysprops.remove("java.net.socks.password"); | |||||
| sysprops.remove(ProxySetup.SOCKS_PROXY_HOST); | |||||
| sysprops.remove(ProxySetup.SOCKS_PROXY_PORT); | |||||
| sysprops.remove(ProxySetup.SOCKS_PROXY_USERNAME); | |||||
| sysprops.remove(ProxySetup.SOCKS_PROXY_PASSWORD); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,5 +1,5 @@ | |||||
| /* | /* | ||||
| * Copyright 2005 The Apache Software Foundation | |||||
| * Copyright 2005-2006 The Apache Software Foundation | |||||
| * | * | ||||
| * Licensed under the Apache License, Version 2.0 (the "License"); | * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
| * you may not use this file except in compliance with the License. | * you may not use this file except in compliance with the License. | ||||
| @@ -37,6 +37,21 @@ public class ProxySetup { | |||||
| * @value | * @value | ||||
| */ | */ | ||||
| public static final String USE_SYSTEM_PROXIES="java.net.useSystemProxies"; | public static final String USE_SYSTEM_PROXIES="java.net.useSystemProxies"; | ||||
| public static final String HTTP_PROXY_HOST = "http.proxyHost"; | |||||
| public static final String HTTP_PROXY_PORT = "http.proxyPort"; | |||||
| public static final String HTTPS_PROXY_HOST = "https.proxyHost"; | |||||
| public static final String HTTPS_PROXY_PORT = "https.proxyPort"; | |||||
| public static final String FTP_PROXY_HOST = "ftp.proxyHost"; | |||||
| public static final String FTP_PROXY_PORT = "ftp.proxyPort"; | |||||
| public static final String HTTP_NON_PROXY_HOSTS = "http.nonProxyHosts"; | |||||
| public static final String HTTPS_NON_PROXY_HOSTS = "https.nonProxyHosts"; | |||||
| public static final String FTP_NON_PROXY_HOSTS = "ftp.nonProxyHosts"; | |||||
| public static final String HTTP_PROXY_USERNAME = "http.proxyUser"; | |||||
| public static final String HTTP_PROXY_PASSWORD = "http.proxyPassword"; | |||||
| public static final String SOCKS_PROXY_HOST = "socksProxyHost"; | |||||
| public static final String SOCKS_PROXY_PORT = "socksProxyPort"; | |||||
| public static final String SOCKS_PROXY_USERNAME = "java.net.socks.username"; | |||||
| public static final String SOCKS_PROXY_PASSWORD = "java.net.socks.password"; | |||||
| /** | /** | ||||
| @@ -0,0 +1,107 @@ | |||||
| /* | |||||
| * Copyright 2006 The Apache Software Foundation | |||||
| * | |||||
| * Licensed 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.util.java15; | |||||
| import org.apache.tools.ant.BuildException; | |||||
| import java.net.ProxySelector; | |||||
| import java.net.URI; | |||||
| import java.net.URISyntaxException; | |||||
| import java.net.Proxy; | |||||
| import java.net.SocketAddress; | |||||
| import java.net.InetSocketAddress; | |||||
| import java.net.InetAddress; | |||||
| import java.util.List; | |||||
| import java.util.Iterator; | |||||
| /** | |||||
| * This class exists to create a string that tells diagnostics about the current | |||||
| * state of proxy diagnostics. | |||||
| * It does this in its toString operator. | |||||
| * Java1.5+ is needed to compile this class; its interface is classic typeless | |||||
| * Java. | |||||
| * @since Ant 1.7 | |||||
| */ | |||||
| public class ProxyDiagnostics { | |||||
| String destination; | |||||
| URI destURI; | |||||
| /** {@value} */ | |||||
| public static final String DEFAULT_DESTINATION = "http://ant.apache.org/"; | |||||
| /** | |||||
| * create a diagnostics binding for a specific URI | |||||
| * @param destination dest to bind to | |||||
| * @throws BuildException if the URI is malformed. | |||||
| */ | |||||
| public ProxyDiagnostics(String destination) { | |||||
| this.destination = destination; | |||||
| try { | |||||
| this.destURI=new URI(destination); | |||||
| } catch (URISyntaxException e) { | |||||
| throw new BuildException(e); | |||||
| } | |||||
| } | |||||
| /** | |||||
| * create a proxy diagnostics tool bound to | |||||
| * {@link #DEFAULT_DESTINATION} | |||||
| */ | |||||
| public ProxyDiagnostics() { | |||||
| this(DEFAULT_DESTINATION); | |||||
| } | |||||
| public String toString() { | |||||
| ProxySelector selector=ProxySelector.getDefault(); | |||||
| List list = selector.select(destURI); | |||||
| StringBuffer result=new StringBuffer(); | |||||
| Iterator proxies=list.listIterator(); | |||||
| while (proxies.hasNext()) { | |||||
| Proxy proxy = (Proxy) proxies.next(); | |||||
| SocketAddress address = proxy.address(); | |||||
| if(address==null) { | |||||
| result.append("Direct connection\n"); | |||||
| } else { | |||||
| result.append(proxy.toString()); | |||||
| if(address instanceof InetSocketAddress) { | |||||
| InetSocketAddress ina=(InetSocketAddress) address; | |||||
| result.append(' '); | |||||
| result.append(ina.getHostName()); | |||||
| result.append(':'); | |||||
| result.append(ina.getPort()); | |||||
| if(ina.isUnresolved()) { | |||||
| result.append(" [unresolved]"); | |||||
| } else { | |||||
| InetAddress addr = ina.getAddress(); | |||||
| result.append(" ["); | |||||
| result.append(addr.getHostAddress()); | |||||
| result.append(']'); | |||||
| } | |||||
| } | |||||
| result.append('\n'); | |||||
| } | |||||
| } | |||||
| return result.toString(); | |||||
| } | |||||
| } | |||||