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(); | |||||
} | |||||
} |