Problem Description

As of this writing (June 07 2005), the build process fails to download dependency files being behind firewall (proxy server).

Solution

However a small modification to <Gabber.java> and <dependency.xml> files circumvent this problem.

Grabber.java changes

We need to add support for configuring the following attributes proxyHost, proxyPort, proxyUser and proxyPwd.

The setProxyHost() method simply sets the "http.proxyHost" system property.

The setProxyPort() method simply sets the "http.proxyPort" system property.

The setProxyUser() and setProxyPwd() updates instance _proxyUser and _proxyPwd instance variables which are used in the execute() method to attach a "Proxy-Authorization" request property to the urlConnection:

...

try
{

URLConnection connection = _src.openConnection();

if (_proxyUser != null)
{
sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();
String encoded = encoder.encode(
new String(_proxyUser + ":" + _proxyPwd).getBytes());
connection.setRequestProperty("Proxy-Authorization", "Basic " + encoded);
}

connection.connect();

copyConnectionToFile(connection);
}
catch (IOException ex)
{
log("Failure accessing " + _src + ": " + ex.getMessage(), Project.MSG_ERR);
}

...

dependency.xml changes

the grab-file macro should define 4 additional attributes proxyHost, proxyPort, proxyUser and proxyPwd whith configured defaults which may be empty properties in the dependency.properties file or idealy references user configurable properties !!
...

<macrodef name="grab-file">
<attribute name="src" description="The URL of the file to download."/>

<attribute name="dest" description="The directory and file to copy to."/>

<attribute name="proxyHost" default="${proxy.host}" description="The proxy hostname or ip address to used"/>

<attribute name="proxyPort" default="${proxy.port}" description="The proxy port to used"/>

<attribute name="proxyUser" default="${proxy.user}" description="The user used to log onto the proxy"/>

<attribute name="proxyPwd" default="${proxy.pwd}" description="The password used to log onto the proxy"/>

<sequential>

<mkdir dir="${hivebuild.classes.dir}"/>

<javac includeantruntime="yes"
srcdir="${hivebuild.src.dir}"
destdir="${hivebuild.classes.dir}"/>

<taskdef classname="org.apache.hivemind.build.Grabber" name="grabber" classpathref="grabber.classpath"/>

<grabber src="@{src}" dest="@{dest}" proxyHost="@{proxyHost}" proxyPort="@{proxyPort}"
proxyUser="@{proxyUser}" proxyPwd="@{proxyPwd}"/>

</sequential>

</macrodef>

...

  • No labels