|
|
@@ -0,0 +1,194 @@ |
|
|
|
<html> |
|
|
|
|
|
|
|
<head> |
|
|
|
<meta http-equiv="Content-Language" content="en-us"> |
|
|
|
<link rel="stylesheet" type="text/css" href="stylesheets/style.css"> |
|
|
|
<title>Proxy Configuration</title> |
|
|
|
</head> |
|
|
|
|
|
|
|
<body> |
|
|
|
<h2>Proxy Configuration</h2> |
|
|
|
|
|
|
|
<p> |
|
|
|
|
|
|
|
All tasks running in Ant's JVM share the same HTTP/FTP/Socks |
|
|
|
proxy configuration. |
|
|
|
</p> |
|
|
|
|
|
|
|
<p> |
|
|
|
When any task tries to retrieve content from an HTTP page, including the |
|
|
|
<code><get></code> task, any automated URL retrieval in |
|
|
|
an XML/XSL task, or any third-party task that uses the <code>java.net.URL</code> |
|
|
|
classes, the proxy settings may make the difference between success and failure. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
Anyone authoring a build file behind a blocking firewall will immediately appreciate |
|
|
|
the problems and may want to write a build file to deal with the problem, but |
|
|
|
users of third party build build files may find that the build file itself |
|
|
|
does not work behind the firewall. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
This is a longstanding problem with Java and Ant, which Java1.5 finally |
|
|
|
addresses. When Ant is run under Java1.5, it automatically sets the |
|
|
|
<code>java.net.useSystemProxies</code> system property, telling the JVM to |
|
|
|
switch to the OS-configured proxy settings.This is automatic, but it can be disabled. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
When running Ant on older JVMs, this property is ignored. There are two other |
|
|
|
ways to configure Ant's proxy settings in these cases. |
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h3>Java1.5 automatic proxy support (new for Ant1.7)</h3> |
|
|
|
<p> |
|
|
|
When Ant starts up, it automatically sets the |
|
|
|
<code>java.net.useSystemProxies</code> system property. This tells |
|
|
|
a Java1.5+ JVM to use the current set of property settings of the host |
|
|
|
environment. Other JVMs, such as the Kaffe and Apache Harmony runtimes, |
|
|
|
may also use this property in future, which is why Ant always sets the |
|
|
|
property -it is ignored on the Java1.4 and earlier runtimes. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
This property should be enough to automatically give Ant hosted |
|
|
|
builds network access. It may also work under an IDE, though that depends |
|
|
|
upon the IDE and how it starts ant. If it bypasses Ant's Main entry point, |
|
|
|
the proxy setup may be skipped, and if networking has already started up |
|
|
|
by the time ant is run, the option may be ignored. Consult your IDE |
|
|
|
documentation for IDE-specific information upon proxy setup. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
To disable this automatic feature, set the command line option |
|
|
|
<tt>-noproxy</tt>, or set a JVM or Ant property |
|
|
|
<code>java.net.useSystemProxies</code> to a value other than |
|
|
|
<code>true</code> or <code>on</code>. If the JVM option is already set, |
|
|
|
Ant will not touch it; if an Ant property of that name is set, Ant will |
|
|
|
pass the value of that property down to the JVM. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
We are not entirely sure where it reads the property settings from. |
|
|
|
For windows, it probably reads the appropriate bits of the registry. For |
|
|
|
Unix/Linux it may use the current Gnome2 settings. |
|
|
|
|
|
|
|
<p> |
|
|
|
The biggest limitation of this feature, other than requiring a 1.5+ JVM, |
|
|
|
is that it is not dynamic. A long-lasting build hosted on a laptop will |
|
|
|
not adapt to changes in proxy settings. Furthermore, unless the user |
|
|
|
is running <a |
|
|
|
href="http://www.hpl.hp.com/techreports/2001/HPL-2001-158.html">an adaptive |
|
|
|
laptop</a>, the host's proxy settings will not-automatically adapt to |
|
|
|
changes in network context. The <code>-noproxy</code> option may be a useful |
|
|
|
one to use when roaming. |
|
|
|
</p> |
|
|
|
|
|
|
|
<h3>JVM options</h3> |
|
|
|
<p> |
|
|
|
Any JVM can have its proxy options explicitly configured by passing |
|
|
|
the appropriate <code>-D</code> system property options to the runtime. |
|
|
|
Ant can be configured through all its shell scripts via the |
|
|
|
<code>ANT_OPTS</code> environment variable, which is a list of options to |
|
|
|
supply to Ant's JVM: |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
For bash: |
|
|
|
</p> |
|
|
|
<pre> |
|
|
|
export ANT_OPTS="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080" |
|
|
|
</pre> |
|
|
|
For csh/tcsh: |
|
|
|
<pre> |
|
|
|
setenv ANT_OPTS "-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080" |
|
|
|
</pre> |
|
|
|
<p> |
|
|
|
For Windows, set the ANT_OPTS environment variable in the appropriate "MyComputer" |
|
|
|
properties dialog box. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
This mechanism works across Java versions, is cross-platform and reliable. |
|
|
|
Once set, all build files run via the command line will automatically have |
|
|
|
their proxy setup correctly, without needing any build file changes. It also |
|
|
|
apparently overrides ants automatic proxy settings options |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
It is limited in the following ways: |
|
|
|
</p> |
|
|
|
<ol> |
|
|
|
<li>Does not work under IDEs. These need their own proxy settings changed</li> |
|
|
|
<li>Not dynamic enough to deal with laptop configuration changes.</li> |
|
|
|
</ol> |
|
|
|
<p> |
|
|
|
If you are using Ant on a pre-Java1.5 machine behind a firewall, this is |
|
|
|
the simplest and best way to configure your runtime to work with build files |
|
|
|
that go beyond the firewall. |
|
|
|
</p> |
|
|
|
|
|
|
|
<h3>SetProxy Task</h3> |
|
|
|
<p> |
|
|
|
The <a href="OptionalTasks/setproxy.html">setproxy task</a> can be used to |
|
|
|
explicitly set a proxy in a build file. This manipulates the many proxy |
|
|
|
configuration properties of a JVM, and controls the proxy settings for all |
|
|
|
network operations in the same JVM from that moment. |
|
|
|
</p> |
|
|
|
<p> |
|
|
|
If you have a build file that is only to be used in-house, behind a firewall, on |
|
|
|
an older JVM, <i>and you cannot change Ant's JVM proxy settings</i>, then |
|
|
|
this is your best option. It is ugly and brittle, because the build file now contains |
|
|
|
system configuration information. It is also hard to get this right across |
|
|
|
the many possible proxy options of different users (none, HTTP, SOCKS). |
|
|
|
</p> |
|
|
|
|
|
|
|
|
|
|
|
<p> |
|
|
|
Note that proxy configurations set with this task will probably override |
|
|
|
any set by other mechanisms. It can also be used with fancy tricks to |
|
|
|
only set a proxy if the proxy is considered reachable: |
|
|
|
</p> |
|
|
|
|
|
|
|
<pre> |
|
|
|
<target name="probe-proxy" depends="init"> |
|
|
|
<condition property="proxy.enabled"> |
|
|
|
<and> |
|
|
|
<isset property="proxy.host"/> |
|
|
|
<isreachable host="${proxy.host}"/> |
|
|
|
</and> |
|
|
|
</condition> |
|
|
|
</target> |
|
|
|
|
|
|
|
<target name="proxy" depends="probe-proxy" if="proxy.enabled"> |
|
|
|
<property name="proxy.port" value="80"/> |
|
|
|
<property name="proxy.user" value=""/> |
|
|
|
<property name="proxy.pass" value=""/> |
|
|
|
<setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}" |
|
|
|
proxyuser="${proxy.user}" proxypassword="${proxy.pass}"/> |
|
|
|
</target> |
|
|
|
</pre> |
|
|
|
|
|
|
|
<h3>Summary and conclusions</h3> |
|
|
|
<p> |
|
|
|
There are three ways to set up proxies in Ant. |
|
|
|
</p> |
|
|
|
<ol> |
|
|
|
<li>Automatically, with Ant1.7 -use <code>-noproxy</code> to disable this.</li> |
|
|
|
<li>Via JVM system properties -set these in the ANT_ARGS environment variable.</li> |
|
|
|
<li>Via the <setproxy> task.</li> |
|
|
|
</ol> |
|
|
|
|
|
|
|
<p> |
|
|
|
As Java1.5 adoption increases, automatic proxy support should become more |
|
|
|
widespread. For this reason, we would encourage users not to try and |
|
|
|
second-guess network configurations with setproxy, and instead to encourage |
|
|
|
users to move up to Ant1.7/Java1.5, and if they cannot, to set proxy options |
|
|
|
in the ANT_ARGS environment variable. |
|
|
|
</p> |
|
|
|
|
|
|
|
<h4>Further reading</h4> |
|
|
|
|
|
|
|
<ul> |
|
|
|
<li><a href="http://java.sun.com/j2se/1.5.0/docs/guide/net/properties.html"> |
|
|
|
Java Networking Properties</a>. Notice how not all proxy settings are documented |
|
|
|
there. |
|
|
|
<li><a href="http://blogs.sun.com/roller/resources/jcc/Proxies.pdf">Proxies</a> |
|
|
|
</li> |
|
|
|
</ul> |
|
|
|
</body> |
|
|
|
</html> |