<!--
   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.
-->
<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>
This page discussing proxy issues on command-line ant.
Consult your IDE documentation for IDE-specific information upon proxy setup.
</p>

<p>

All tasks and threads 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>&lt;get&gt;</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 long standing problem with Java and Ant. The only way to fix
    it is to explictly configure Ant with the proxy settings, either
    by passing down the proxy details as JVM properties, or to
    tell Ant on a Java1.5+ system to have the JVM work it out for itself.

</p>



<h3>Java1.5+ proxy support (new for Ant1.7)</h3>
<p>
    When Ant starts up, if the <code>-autoproxy</code>
    command is supplied, Ant 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.
    It is ignored on the Java1.4 and earlier runtimes.
</p>
<p>
    This property maybe enough to give command-line Ant
    builds network access, although in practise the results
    are inconsistent.
</p>
<p>
    It is has also been reported a breaking the IBM Java 5 JRE on AIX,
    and does not always work on Linux (presumably due to missing gconf settings)
    Other odd things can go wrong, like Oracle JDBC drivers or pure Java SVN clients.
</p>

<p>
    To make the <code>-autoproxy</code> option the default, add it to the environment variable
    <code>ANT_ARGS</code>, which contains a list of arguments to pass to Ant on every
    command line run.
</p>

<h4>How Autoproxy works</h4>
<p>
We are grateful for some input from Sun as to how the proxy code works under
Java 1.5 and up. The <code>java.net.useSystemProxies</code> is checked only
once, at startup time, the other checks (registry, gconf, system properties) are done
dynamically whenever needed (socket connection, URL connection etc..).
</p>
<h5>Windows</h5>

<p>
The JVM goes straight to the registry, bypassing WinInet, as it is not
present/consistent on all supported Windows platforms (it is part of IE,
really). Java 7 may use the Windows APIs on the platforms when it is present.
</p>

<h5>Linux</h5>

<p>
The JVM uses the gconf library to look at specific entries.
The GConf-2 settings used are:
</p>
<pre>
 - /system/http_proxy/use_http_proxy            boolean
 - /system/http_proxy/use_authentication        boolean
 - /system/http_proxy/host                      string
 - /system/http_proxy/authentication_user       string
 - /system/http_proxy/authentication_password   string
 - /system/http_proxy/port                      int
 - /system/proxy/socks_host                     string
 - /system/proxy/mode                           string
 - /system/proxy/ftp_host                       string
 - /system/proxy/secure_host                    string
 - /system/proxy/socks_port                     int
 - /system/proxy/ftp_port                       int
 - /system/proxy/secure_port                    int
 - /system/proxy/no_proxy_for                   list
 - /system/proxy/gopher_host                    string
 - /system/proxy/gopher_port                    int
</pre>
<p>
If you are using KDE or another GUI than Gnome, you can still use the
<code>gconf-editor</code> tool to add these entries.
</p>


<h3>Manual 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>
If you insert this line into the Ant shell script itself, it gets picked up
by all continuous integration tools running on the system that call Ant via the
command line.
</p>
<p>
  For Windows, set the <code>ANT_OPTS</code> environment variable in the appropriate "My Computer" 
  properties dialog box (winXP), "Computer" properties (Vista)
</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 Ant's 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>


<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>
  &lt;target name="probe-proxy" depends="init"&gt;
    &lt;condition property="proxy.enabled"&gt;
      &lt;and&gt;
        &lt;isset property="proxy.host"/&gt;
        &lt;isreachable host="${proxy.host}"/&gt;
      &lt;/and&gt;
    &lt;/condition&gt;
  &lt;/target&gt;

  &lt;target name="proxy" depends="probe-proxy" if="proxy.enabled"&gt;
    &lt;property name="proxy.port" value="80"/&gt;
    &lt;property name="proxy.user" value=""/&gt;
    &lt;property name="proxy.pass" value=""/&gt;
    &lt;setproxy proxyhost="${proxy.host}" proxyport="${proxy.port}"
      proxyuser="${proxy.user}" proxypassword="${proxy.pass}"/&gt;
  &lt;/target&gt;
</pre>

<h3>Custom ProxySelector implementations</h3>
<p>
    As Java lets developers write their own ProxySelector implementations, it 
    is theoretically possible for someone to write their own proxy selector class that uses
    different policies to determine proxy settings. There is no explicit support
    for this in Ant, and it has not, to the team's knowledge, been attempted. 
</p>
<p>
    This could be the most flexible of solutions, as one could easily imagine
    an Ant-specific proxy selector that was driven off ant properties, rather
    than system properties. Developers could set proxy options in their
    custom build.properties files, and have this propagate.
</p>
<p>
    One issue here is with concurrency: the default proxy selector is per-JVM,
    not per-thread, and so the proxy settings will apply to all sockets opened
    on all threads; we also have the problem of how to propagate options from
    one build to the JVM-wide selector.
</p>

<h3>Configuring the Proxy settings of Java programs under Ant</h3>

<p>
    Any program that is executed with <code>&lt;java&gt;</code> without setting
    <code>fork="true"</code> will pick up the Ant's settings. If you need
    different values, set <code>fork="false"</code> and provide the values
    in <code>&lt;sysproperty&gt;</code> elements.
</p>    
    If you wish to have
    a forked process pick up the Ant's settings, use the 
    <a href="CoreTypes/propertyset.html"><code>&lt;syspropertyset&gt;</code></a>
    element to propagate the normal proxy settings. The following propertyset
    is a datatype which can be referenced in a <code>&lt;java&gt;</code> task to
    pass down the current values.
    
</p>
<pre>
&lt;propertyset id="proxy.properties">
  &lt;propertyref prefix="java.net.useSystemProxies"/>
  &lt;propertyref prefix="http."/>
  &lt;propertyref prefix="https."/>
  &lt;propertyref prefix="ftp."/>
  &lt;propertyref prefix="socksProxy"/>
&lt;/propertyset>
</pre>

<h3>Summary and conclusions</h3>
<p>
There are four ways to set up proxies in Ant.
</p>
<ol>
<li>With Ant1.7 and Java 1.5+ using the <code>-autoproxy</code> parameter.</li>
<li>Via JVM system properties -set these in the ANT_ARGS environment variable.</li>
<li>Via the &lt;setproxy&gt; task.</li>
<li>Custom ProxySelector implementations</li>
</ol>
<p>
Proxy settings are automatically shared with Java programs started under Ant <i>
that are not forked</i>; to pass proxy settings down to subsidiary programs, use
a propertyset.
</p>
<p>
Over time, we expect the Java 5+ proxy features to stabilize, and for Java code
to adapt to them. However, given the fact that it currently does break some
builds, it will be some time before Ant enables the automatic proxy feature by
default. Until then, you have to enable the <code>-autoproxy</code> option or
use one of the alternate mechanisms to configure the JVM.

<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>
