From 0ecb6427b1bffab63958baa82b3b738bcf77240f Mon Sep 17 00:00:00 2001
From: twogee <g.grigelionis@gmail.com>
Date: Tue, 26 Dec 2017 21:51:41 +0100
Subject: [PATCH] =?UTF-8?q?Let=E2=80=99s=20use=20Ivy=20(properly!)=20and?=
 =?UTF-8?q?=20drop=20Maven=20Ant=20tasks=20+=20Commons=20OpenPGP?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 get-m2.xml => attic/get-m2.xml      |   0
 {lib => attic}/libraries.properties |   0
 {release => attic}/signit.xml       |   0
 build.xml                           |   4 +-
 fetch.xml                           | 381 ++++------------------------
 ivy.xml                             | 182 +++++++++++++
 ivysettings.xml                     |  35 +++
 release/ivy.xml                     | 180 -------------
 release/ivysettings.xml             |  38 ++-
 release/upload.xml                  |  21 +-
 src/etc/poms/README.txt             |  16 +-
 src/etc/poms/ant-netrexx/pom.xml    |  14 +-
 12 files changed, 340 insertions(+), 531 deletions(-)
 rename get-m2.xml => attic/get-m2.xml (100%)
 rename {lib => attic}/libraries.properties (100%)
 rename {release => attic}/signit.xml (100%)
 create mode 100644 ivy.xml
 create mode 100644 ivysettings.xml
 delete mode 100644 release/ivy.xml

diff --git a/get-m2.xml b/attic/get-m2.xml
similarity index 100%
rename from get-m2.xml
rename to attic/get-m2.xml
diff --git a/lib/libraries.properties b/attic/libraries.properties
similarity index 100%
rename from lib/libraries.properties
rename to attic/libraries.properties
diff --git a/release/signit.xml b/attic/signit.xml
similarity index 100%
rename from release/signit.xml
rename to attic/signit.xml
diff --git a/build.xml b/build.xml
index 358765f52f..333ddd140e 100644
--- a/build.xml
+++ b/build.xml
@@ -1035,7 +1035,7 @@
     <mkdir dir="${dist.etc}"/>
 
     <copy todir="${dist.lib}" file="${lib.dir}/README"/>
-    <copy todir="${dist.lib}" file="${lib.dir}/libraries.properties"/>
+    <copy todir="${dist.lib}" file="${basedir}/ivy.xml"/>
 
     <copy todir="${dist.lib}">
       <fileset dir="${src.dir}/etc/poms">
@@ -1150,7 +1150,7 @@
         <include name="optional/junit*.jar"/>
         <include name="optional/hamcrest*.jar"/>
         <include name="README"/>
-        <include name="libraries.properties"/>
+        <include name="ivy.xml"/>
       </fileset>
     </copy>
 
diff --git a/fetch.xml b/fetch.xml
index f4b6fa6669..1f9997c7b9 100644
--- a/fetch.xml
+++ b/fetch.xml
@@ -1,5 +1,4 @@
 <?xml version="1.0"?>
-
 <!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -16,13 +15,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 -->
-<!--
-  =======================================================================
-    Build file to fetch optional libraries for Apache Ant
-  =======================================================================
--->
-<project name="fetch" default="all" basedir=".">
-
+<project name="upload" default="fetch" xmlns:ivy="antlib:org.apache.ivy.ant">
   <description>
 This build file downloads JAR files that optional Ant tasks use,
 and installs them in a location that is accessible the next time Ant runs.
@@ -42,12 +35,12 @@ For example, to set the proxy up in the tcsh shell, the command would
 be something like:
 
 For csh/tcsh:
- setenv ANT_OPTS "-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080"
+setenv ANT_OPTS "-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080"
 For bash:
- export ANT_OPTS="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080"
+export ANT_OPTS="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080"
 For Windows, set the environment variable in the appropriate dialog box
-and open a new console. or, by hand
- set ANT_OPTS = -Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080
+and open a new console or, by hand
+set ANT_OPTS = -Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080
   </description>
 
   <!-- Give user a chance to override without editing this file
@@ -57,16 +50,14 @@ and open a new console. or, by hand
   <property name="optional.dir" location="${lib.dir}/optional"/>
   <property name="userlib.dir" location="${user.home}/.ant/lib"/>
 
-  <!-- Load in our properties table -->
-  <property file="${lib.dir}/libraries.properties"/>
-
-  <!-- Temporary cache for working files -->
-  <property name="temp.dir" location="${user.home}/.ant/tempcache"/>
-  <property name="keep.temp.dir" value="true"/>
-
-  <import file="get-m2.xml"/>
+  <!-- Ivy -->
+  <property name="ivy.version" value="2.4.0"/>
+  <property name="ivy.dir" value="${user.home}/.ivy2/cache/org.apache.ivy/jars"/>
+  <property name="ivy.jar.name" value="ivy-${ivy.version}.jar"/>
+  <property name="ivy.jar.name" value="ivy-${ivy.version}.jar"/>
+  <available property="has.ivy" file="${ivy.dir}/${ivy.jar.name}" type="file"/>
 
-  <target name="pick-dest">
+  <target name="pick-dest" unless="dest.dir">
     <fail>
       <condition>
         <not>
@@ -79,323 +70,61 @@ Set -Ddest=LOCATION on the command line
   -Ddest=optional optional dir  $${basedir}/lib/optional  (for Ant developers)
     </fail>
 
-    <condition property="dest.dir"
-               value="${lib.dir}">
+    <condition property="dest.dir" value="${lib.dir}">
       <equals arg1="${dest}" arg2="system"/>
     </condition>
-    <condition property="dest.dir"
-               value="${optional.dir}">
+    <condition property="dest.dir" value="${optional.dir}">
       <equals arg1="${dest}" arg2="optional"/>
     </condition>
-    <condition property="dest.dir"
-               value="${userlib.dir}">
+    <condition property="dest.dir" value="${userlib.dir}">
       <equals arg1="${dest}" arg2="user"/>
     </condition>
     <fail unless="dest.dir">Unknown destination : ${dest}</fail>
-    <echo>Downloading to ${dest.dir}</echo>
-    <property name="m2.dest.dir" value="${dest.dir}"/>
   </target>
 
-
-  <target name="macros" depends="pick-dest,get-m2"
-          xmlns:artifact="antlib:org.apache.maven.artifact.ant">
-    <fail>
-      Cannot execute multiple targets due to the bug in Maven Ant tasks
-      <condition>
-        <contains string="${ant.project.invoked-targets}" substring=","/>
-      </condition>
-    </fail>
-    <macrodef name="f2">
-      <attribute name="project"/>
-      <attribute name="archive" default="@{project}"/>
-      <attribute name="repository" default="${m2.repo}"/>
-      <attribute name="id" default="central"/>
-      <sequential>
-        <fail>
-          Unknown archive @{archive} -no property @{archive}.version defined in ${lib.dir}/libraries.properties.
-          <condition>
-            <not>
-              <isset property="@{archive}.version"/>
-            </not>
-          </condition>
-        </fail>
-        <artifact:dependencies pathID="@{archive}.path" useScope="runtime">
-          <dependency groupId="@{project}"
-                      artifactId="@{archive}"
-                      version="${@{archive}.version}">
-            <!-- exclude dependencies of ant-antunit (they should be in optional scope) -->
-            <exclusion groupId="org.apache.ant" artifactId="ant"/>
-            <exclusion groupId="org.apache.ant" artifactId="ant-launcher"/>
-          </dependency>
-          <artifact:remoteRepository url="@{repository}" id="@{id}"/>
-        </artifact:dependencies>
-        <!-- now we are left with the problem of getting the files into our directory -->
-        <copy todir="${dest.dir}">
-          <path refid="@{archive}.path"/>
-          <flattenmapper/>
-        </copy>
-      </sequential>
-    </macrodef>
+  <target name="get-ivy" depends="pick-dest" unless="has.ivy">
+    <mkdir dir="${ivy.dir}"/>
+    <get usetimestamp="true" src="https://repository.apache.org/content/repositories/releases/org/apache/ivy/ivy/${ivy.version}/${ivy.jar.name}"
+         skipexisting="true"
+         dest="${ivy.dir}/${ivy.jar.name}"/>
   </target>
 
-  <target name="nonm2-macros" depends="pick-dest">
-    <macrodef name="get-ftp-file">
-      <attribute name="host"/>
-      <attribute name="port" default="21"/>
-      <attribute name="remotedir"/>
-      <attribute name="filename"/>
-      <attribute name="localdir" default="${dest.dir}"/>
-      <attribute name="user" default="anonymous"/>
-      <attribute name="pw" default="anonymous"/>
-      <sequential>
-        <ftp server="@{host}" port="@{port}" userid="@{user}" password="@{pw}" passive="true"
-             remotedir="@{remotedir}" action="get" depends="true" preserveLastModified="true"
-             skipFailedTransfers="true">
-          <fileset dir="@{localdir}">
-            <include name="@{filename}"/>
-          </fileset>
-        </ftp>
-      </sequential>
-    </macrodef>
+  <target name="init-ivy" depends="get-ivy">
+    <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpath="${ivy.dir}/${ivy.jar.name}"/>
+    <ivy:configure file="${basedir}/ivysettings.xml" override="true"/>
   </target>
 
-
-  <!-- any init stuff -->
-  <target name="init" depends="macros"/>
-
-  <target name="init-no-m2" depends="nonm2-macros"/>
-
-  <target name="init-cache">
-    <available property="temp.cache.already.exists" file="${temp.dir}" type="dir"/>
-    <condition property="user.wants.temp.cache">
-      <and>
-        <isset property="keep.temp.dir"/>
-        <not>
-          <or>
-            <equals arg1="${keep.temp.dir}" arg2="false" casesensitive="false"/>
-            <equals arg1="${keep.temp.dir}" arg2="no" casesensitive="false"/>
-            <equals arg1="${keep.temp.dir}" arg2="off" casesensitive="false"/>
-          </or>
-        </not>
-      </and>
+  <target name="fetch" depends="init-ivy">
+    <condition property="configurations" value="*" else="${ant.project.invoked-targets}">
+      <equals arg1="${ant.project.invoked-targets}" arg2="fetch" trim="true"/>
     </condition>
-    <condition property="delete.temp.cache">
-      <and>
-        <not>
-          <isset property="temp.cache.already.exists"/>
-        </not>
-        <not>
-          <isset property="user.wants.temp.cache"/>
-        </not>
-      </and>
-    </condition>
-  </target>
-
-  <target name="-setup-temp-cache" depends="init-cache" unless="temp.cache.already.exists"
-          description="Set up temporary cache for downloaded files">
-    <mkdir dir="${temp.dir}"/>
-  </target>
-
-  <target name="-cleanup-temp-cache" depends="init-cache" if="delete.temp.cache"
-          description="Get rid of the temporary cache directory">
-    <delete dir="${temp.dir}"/>
-  </target>
-
-
-  <target name="diag" depends="init">
-    <echoproperties/>
-  </target>
-
-  <target name="antunit"
-          description="load AntUnit library"
-          depends="init">
-    <f2 project="org.apache.ant" archive="ant-antunit"/>
-  </target>
-
-  <target name="ivy"
-          description="load Ivy dependency manager"
-          depends="init">
-    <f2 project="org.apache.ivy" archive="ivy"/>
-  </target>
-
-  <target name="logging"
-          description="load logging libraries (Commons and Log4j)"
-          depends="init">
-    <f2 project="log4j"/>
-    <f2 project="commons-logging" archive="commons-logging-api"/>
-  </target>
-
-  <target name="junit"
-          description="load JUnit libraries"
-          depends="init">
-    <f2 project="junit"/>
-    <f2 project="org.hamcrest" archive="hamcrest-library"/>
-  </target>
-
-  <target name="junitlauncher"
-    description="load junitlauncher libraries"
-    depends="init">
-    <f2 project="org.junit.platform" archive="junit-platform-launcher" />
-  </target>
-
-  <target name="junit-engine-jupiter"
-          description="load junit jupiter engine libraries (necessary only for internal Ant project tests)"
-          depends="init">
-    <f2 project="org.junit.jupiter" archive="junit-jupiter-engine" />
-  </target>
-
-  <target name="junit-engine-vintage"
-          description="load junit vintage engine libraries (necessary only for internal Ant project tests)"
-          depends="init">
-    <f2 project="org.junit.vintage" archive="junit-vintage-engine" />
-  </target>
-
-  <target name="xml"
-          description="load full XML libraries (Xalan and xml-resolver)"
-          depends="init">
-    <f2 project="xalan"/>
-    <f2 project="xml-resolver"/>
-  </target>
-
-  <target name="networking"
-          description="load networking libraries (commons-net and JSch)"
-          depends="init">
-    <f2 project="commons-net"/>
-    <f2 project="com.jcraft" archive="jsch"/>
-  </target>
-
-  <target name="regexp"
-          description="load regexp libraries"
-          depends="init">
-    <f2 project="jakarta-regexp"/>
-    <f2 project="oro"/>
-  </target>
-
-  <target name="antlr"
-          description="load ANother Tool for Language Recognition (ANTLR)"
-          depends="init">
-    <f2 project="antlr"/>
-  </target>
-
-  <target name="bcel"
-          description="load Byte Code Engineering Library (BCEL)"
-          depends="init">
-    <f2 project="org.apache.bcel" archive="bcel"/>
-  </target>
-
-  <target name="jdepend"
-          description="load JDepend libraries"
-          depends="init">
-    <f2 project="jdepend"/>
-  </target>
-
-  <target name="bsf"
-          description="load Bean Scripting Framework"
-          depends="init">
-    <f2 project="bsf"/>
-  </target>
-
-  <target name="jruby"
-          description="load JRuby"
-          depends="bsf">
-    <f2 project="org.jruby" archive="jruby"/>
-  </target>
-
-  <target name="beanshell"
-          description="load BeanShell support"
-          depends="bsf">
-    <f2 project="org.beanshell" archive="bsh"/>
-  </target>
-
-  <target name="jython"
-          description="load Jython"
-          depends="bsf">
-    <f2 project="org.python" archive="jython"/>
-  </target>
-
-  <target name="rhino"
-          description="load Rhino"
-          depends="bsf">
-    <f2 project="org.mozilla" archive="rhino"/>
-  </target>
-
-  <target name="script"
-          description="load script languages (except Jython)"
-          depends="bsf,jruby,beanshell,rhino"/>
-
-  <target name="debugging"
-    description="internal Ant debugging"
-    depends="init">
-    <f2 project="which"/>
-  </target>
-
-  <target name="javamail"
-          description="load Java Mail"
-          depends="init">
-    <!-- We only need this one dependency as per
-      the project doc https://javaee.github.io/javamail/#Download_JavaMail_Release
-      This alone should bring in all necessary dependencies (including the API
-       jars and the activation jars -->
-    <f2 project="com.sun.mail" archive="javax.mail"/>
-  </target>
-
-  <target name="jspc"
-          description="load Jasper"
-          depends="init">
-    <f2 project="tomcat" archive="jasper-compiler"/>
-    <f2 project="tomcat" archive="jasper-runtime"/>
-    <f2 project="javax.servlet" archive="servlet-api"/>
-  </target>
-
-  <target name="jai"
-          description="load Java Advanced Imaging"
-          depends="init">
-    <f2 project="javax.media" archive="jai-core" id="jboss"
-        repository="https://repository.jboss.org/nexus/content/groups/public/"/>
-    <f2 project="com.sun.media" archive="jai-codec" id="jboss"
-        repository="https://repository.jboss.org/nexus/content/groups/public/"/>
-  </target>
-
-  <target name="netrexx"
-          description="load NetRexx compiler"
-          depends="init-no-m2,-setup-temp-cache,-fetch-netrexx,-fetch-netrexx-no-commons-net">
-    <checksum file="${temp.dir}/NetRexx.zip" algorithm="SHA-256" property="${netrexx.sha256}" verifyProperty="netrexx.hash.matches"/>
-    <fail message="NetRexx.zip fetched via ftp has an unexpected SHA-256 checksum, the file may have been tampered with">
-       <condition>
-         <not>
-           <istrue value="${netrexx.hash.matches}"/>
-         </not>
-      </condition>
-    </fail>
-    <copy todir="${dest.dir}" flatten="true">
-      <zipfileset src="${temp.dir}/NetRexx.zip">
-        <include name="NetRexx\lib\NetRexxC.jar"/>
-        <include name="NetRexx\browse\license.txt"/>
-      </zipfileset>
-    </copy>
-    <antcall target="-cleanup-temp-cache"/>
-  </target>
-
-  <available property="have.commons.net" classname="org.apache.commons.net.ftp.FTPClientConfig"/>
-
-  <target name="-fetch-netrexx" if="have.commons.net">
-    <get-ftp-file host="ftp.software.ibm.com" remotedir="/software/awdtools/netrexx"
-            filename="NetRexx.zip" localdir="${temp.dir}"/>
-  </target>
-
-  <target name="-fetch-netrexx-no-commons-net" unless="have.commons.net">
-    <get src="ftp://ftp.software.ibm.com/software/awdtools/netrexx/NetRexx.zip"
-         dest="${temp.dir}/NetRexx.zip" skipexisting="true"/>
-  </target>
-
-  <target name="xz"
-          description="load XZ for Java"
-          depends="init">
-    <f2 project="org.tukaani" archive="xz"/>
-  </target>
-
-  <target name="all"
-    description="load all the libraries (except jython)"
-    depends="antunit,ivy,logging,junit,junitlauncher,xml,networking,regexp,antlr,bcel,jdepend,bsf,debugging,script,
-      javamail,jspc,jai,xz,netrexx,junit-engine-vintage,junit-engine-jupiter"/>
+    <ivy:resolve file="ivy.xml"/>
+    <echo>Downloading to ${dest.dir}</echo>
+    <ivy:retrieve pattern="${dest.dir}/[artifact]-[revision].[ext]" conf="${configurations}"/>
+  </target>
+
+  <target name="antlr" depends="fetch" description="load ANother Tool for Language Recognition (ANTLR)"/>
+  <target name="antunit" depends="fetch" description="load AntUnit library"/>
+  <target name="bcel" depends="fetch" description="load Byte Code Engineering Library (BCEL)"/>
+  <target name="debugging" depends="fetch" description="internal Ant debugging"/>
+  <target name="ivy" depends="fetch" description="load Ivy dependency manager"/>
+  <target name="imageio" depends="fetch" description="load additional ImageIO readers"/>
+  <target name="jai" depends="fetch" description="load Java Advanced Imaging"/>
+  <target name="javamail" depends="fetch" description="load Java Mail"/>
+  <target name="jdepend" depends="fetch" description="load JDepend libraries"/>
+  <target name="jspc" depends="fetch" description="load Jasper from Tomcat 4"/>
+  <target name="junit" depends="fetch" description="load JUnit 3 and 4 libraries"/>
+  <target name="logging" depends="fetch" description="load logging libraries (Commons and Log4j)"/>
+  <target name="netrexx" depends="fetch" description="load NetRexx compiler"/>
+  <target name="networking" depends="fetch" description="load networking libraries (Commons Net and JSch)"/>
+  <target name="regexp" depends="fetch" description="load regexp libraries"/>
+  <target name="script" depends="fetch" description="load script languages"/>
+  <target name="groovy" depends="fetch" description="load Groovy"/>
+  <target name="jruby" depends="fetch" description="load JRuby"/>
+  <target name="jython" depends="fetch" description="load Jython"/>
+  <target name="rhino" depends="fetch" description="load Rhino"/>
+  <target name="xml" depends="fetch" description="load XML libraries (Xalan and XML Resolver)"/>
+  <target name="xz" depends="fetch" description="load XZ for Java"/>
+  <target name="junit-engine-jupiter" depends="fetch" description="load JUnit 5 libraries"/>
+  <target name="junit-engine-vintage" depends="fetch" description="load JUnit 5 libraries for JUnit 4 tests"/>
 </project>
diff --git a/ivy.xml b/ivy.xml
new file mode 100644
index 0000000000..44ed1ae56d
--- /dev/null
+++ b/ivy.xml
@@ -0,0 +1,182 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   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.
+-->
+<ivy-module version="2.0"
+            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+            xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
+  <info organisation="org.apache.ant" module="ant"/>
+  <configurations>
+    <conf name="core" description="only Ant jar, without any dependencies"/>
+    <conf name="antlr" extends="core" description="core + optional ANTLR"/>
+    <conf name="antunit" extends="junit" description="core + optional AntUnit"/>
+    <conf name="bcel" extends="core" description="core + optional BCEL"/>
+    <conf name="debugging" description="internal Ant debugging"/>
+    <conf name="imageio" description="core + ImageIO task"/>
+    <conf name="ivy" description="core + Ivy dependency resolver"/>
+    <conf name="jai" extends="core" description="core + optional Java Advanced Imaging"/>
+    <conf name="javamail" extends="core" description="core + optional Java Mail API"/>
+    <conf name="jdepend" extends="core" description="core + optional JDepend"/>
+    <conf name="jmf" extends="core" description="core + Java Media Framework tasks"/>
+    <conf name="jspc" extends="core" description="core + optional Jasper"/>
+    <conf name="junit" extends="core" description="core + optional JUnit 3 and 4"/>
+    <conf name="junitlauncher" extends="core" description="core + optional JUnit 5"/>
+    <conf name="junit-engine-jupiter" extends="junitlauncher" description="core + optional JUnit 5 engine"/>
+    <conf name="junit-engine-vintage" extends="junitlauncher" description="core + optional JUnit 4 in 5 engine"/>
+    <conf name="logging" extends="core" description="core + optional logging libraries"/>
+    <conf name="netrexx" extends="core" description="core + optional NetRexx compiler"/>
+    <conf name="networking" extends="core" description="core + optional Commons Net/JSCh"/>
+    <conf name="regexp" extends="core" description="core + optional regexp libraries"/>
+    <conf name="script" extends="core" description="core + optional BSF"/>
+    <conf name="xml" extends="core" description="core + optional XML libraries"/>
+    <conf name="xz" extends="core" description="core + optional XZ"/>
+    <conf name="groovy" description="Groovy"/>
+    <conf name="jruby" description="JRuby"/>
+    <conf name="jython" description="Jython"/>
+    <conf name="rhino" description="Rhino"/>
+    <conf name="default" extends="core" description="full Ant with all dependencies"/>
+    <conf name="source" description="Ant sources"/>
+    <conf name="test" description="dependencies used for testing Ant" visibility="private"/>
+    <conf name="release" description="dependencies used for releasing Ant" visibility="private"/>
+  </configurations>
+  <publications xmlns:e="urn:ant.apache.org:ivy-extras">
+    <artifact name="ant-parent" type="pom" ext="pom" conf="default"/>
+    <artifact name="ant" type="pom" ext="pom" conf="core"/>
+    <artifact name="ant" type="jar" ext="jar" conf="core"/>
+    <artifact name="ant" type="source" ext="jar" e:classifier="sources" conf="core,source"/>
+    <artifact name="ant" type="javadoc" ext="jar" e:classifier="javadoc" conf="core,source"/>
+    <artifact name="ant-antlr" type="pom" ext="pom" conf="default,antlr"/>
+    <artifact name="ant-antlr" type="jar" ext="jar" conf="default,antlr"/>
+    <artifact name="ant-antlr" type="source" ext="jar" e:classifier="sources" conf="default,source,antlr"/>
+    <artifact name="ant-apache-bcel" type="pom" ext="pom" conf="default,bcel"/>
+    <artifact name="ant-apache-bcel" type="jar" ext="jar" conf="default,bcel"/>
+    <artifact name="ant-apache-bcel" type="source" ext="jar" e:classifier="sources" conf="default,source,bcel"/>
+    <artifact name="ant-apache-bsf" type="pom" ext="pom" conf="default,script"/>
+    <artifact name="ant-apache-bsf" type="jar" ext="jar" conf="default,script"/>
+    <artifact name="ant-apache-bsf" type="source" ext="jar" e:classifier="sources" conf="default,source,script"/>
+    <artifact name="ant-apache-log4j" type="pom" ext="pom" conf="default,logging"/>
+    <artifact name="ant-apache-log4j" type="jar" ext="jar" conf="default,logging"/>
+    <artifact name="ant-apache-log4j" type="source" ext="jar" e:classifier="sources" conf="default,source,logging"/>
+    <artifact name="ant-apache-oro" type="pom" ext="pom" conf="default,regexp"/>
+    <artifact name="ant-apache-oro" type="jar" ext="jar" conf="default,regexp"/>
+    <artifact name="ant-apache-oro" type="source" ext="jar" e:classifier="sources" conf="default,source,regexp"/>
+    <artifact name="ant-apache-regexp" type="pom" ext="pom" conf="default,regexp"/>
+    <artifact name="ant-apache-regexp" type="jar" ext="jar" conf="default,regexp"/>
+    <artifact name="ant-apache-regexp" type="source" ext="jar" e:classifier="sources" conf="default,source,regexp"/>
+    <artifact name="ant-apache-resolver" type="pom" ext="pom" conf="default,xml"/>
+    <artifact name="ant-apache-resolver" type="jar" ext="jar" conf="default,xml"/>
+    <artifact name="ant-apache-resolver" type="source" ext="jar" e:classifier="sources" conf="default,source,xml"/>
+    <artifact name="ant-apache-xalan2" type="pom" ext="pom" conf="default,xml"/>
+    <artifact name="ant-apache-xalan2" type="jar" ext="jar" conf="default,xml"/>
+    <artifact name="ant-apache-xalan2" type="source" ext="jar" e:classifier="sources" conf="default,source,xml"/>
+    <artifact name="ant-commons-logging" type="pom" ext="pom" conf="default,logging"/>
+    <artifact name="ant-commons-logging" type="jar" ext="jar" conf="default,logging"/>
+    <artifact name="ant-commons-logging" type="source" ext="jar" e:classifier="sources" conf="default,source,logging"/>
+    <artifact name="ant-commons-net" type="pom" ext="pom" conf="default,networking"/>
+    <artifact name="ant-commons-net" type="jar" ext="jar" conf="default,networking"/>
+    <artifact name="ant-commons-net" type="source" ext="jar" e:classifier="sources" conf="default,source,networking"/>
+    <artifact name="ant-imageio" type="pom" ext="pom" conf="default,imageio"/>
+    <artifact name="ant-imageio" type="jar" ext="jar" conf="default,imageio"/>
+    <artifact name="ant-imageio" type="source" ext="jar" e:classifier="sources" conf="default,source,imageio"/>
+    <artifact name="ant-jai" type="pom" ext="pom" conf="default,jai"/>
+    <artifact name="ant-jai" type="jar" ext="jar" conf="default,jai"/>
+    <artifact name="ant-jai" type="source" ext="jar" e:classifier="sources" conf="default,source,jai"/>
+    <artifact name="ant-javamail" type="pom" ext="pom" conf="default,javamail"/>
+    <artifact name="ant-javamail" type="jar" ext="jar" conf="default,javamail"/>
+    <artifact name="ant-javamail" type="source" ext="jar" e:classifier="sources" conf="default,source,javamail"/>
+    <artifact name="ant-jdepend" type="pom" ext="pom" conf="default,jdepend"/>
+    <artifact name="ant-jdepend" type="jar" ext="jar" conf="default,jdepend"/>
+    <artifact name="ant-jdepend" type="source" ext="jar" e:classifier="sources" conf="default,source,jdepend"/>
+    <artifact name="ant-jmf" type="pom" ext="pom" conf="default,jmf"/>
+    <artifact name="ant-jmf" type="jar" ext="jar" conf="default,jmf"/>
+    <artifact name="ant-jmf" type="source" ext="jar" e:classifier="sources" conf="default,source,jmf"/>
+    <artifact name="ant-jsch" type="pom" ext="pom" conf="default,networking"/>
+    <artifact name="ant-jsch" type="jar" ext="jar" conf="default,networking"/>
+    <artifact name="ant-jsch" type="source" ext="jar" e:classifier="sources" conf="default,source,networking"/>
+    <artifact name="ant-junit" type="pom" ext="pom" conf="default,junit"/>
+    <artifact name="ant-junit" type="jar" ext="jar" conf="default,junit"/>
+    <artifact name="ant-junit" type="source" ext="jar" e:classifier="sources" conf="default,source,junit"/>
+    <artifact name="ant-junit4" type="pom" ext="pom" conf="default,junit"/>
+    <artifact name="ant-junit4" type="jar" ext="jar" conf="default,junit"/>
+    <artifact name="ant-junit4" type="source" ext="jar" e:classifier="sources" conf="default,source,junit"/>
+    <artifact name="ant-junitlauncher" type="pom" ext="pom" conf="default,junitlauncher"/>
+    <artifact name="ant-junitlauncher" type="jar" ext="jar" conf="default,junitlauncher"/>
+    <artifact name="ant-junitlauncher" type="source" ext="jar" e:classifier="sources" conf="default,source,junitlauncher"/>
+    <artifact name="ant-launcher" type="pom" ext="pom" conf="default,core"/>
+    <artifact name="ant-launcher" type="jar" ext="jar" conf="core"/>
+    <artifact name="ant-launcher" type="source" ext="jar" e:classifier="sources" conf="source,core"/>
+    <artifact name="ant-netrexx" type="pom" ext="pom" conf="default,netrexx"/>
+    <artifact name="ant-netrexx" type="jar" ext="jar" conf="default,netrexx"/>
+    <artifact name="ant-netrexx" type="source" ext="jar" e:classifier="sources" conf="default,source,netrexx"/>
+    <artifact name="ant-swing" type="pom" ext="pom" conf="default"/>
+    <artifact name="ant-swing" type="jar" ext="jar" conf="default"/>
+    <artifact name="ant-swing" type="source" ext="jar" e:classifier="sources" conf="default,source"/>
+    <artifact name="ant-testutil" type="pom" ext="pom" conf="default,junit"/>
+    <artifact name="ant-testutil" type="jar" ext="jar" conf="default,junit"/>
+    <artifact name="ant-testutil" type="source" ext="jar" e:classifier="sources" conf="default,source,junit"/>
+    <artifact name="ant-xz" type="pom" ext="pom" conf="default,xz"/>
+    <artifact name="ant-xz" type="jar" ext="jar" conf="default,xz"/>
+    <artifact name="ant-xz" type="source" ext="jar" e:classifier="sources" conf="default,source,xz"/>
+  </publications>
+  <dependencies defaultconfmapping="*->default">
+    <dependency org="jakarta-regexp" name="jakarta-regexp" rev="1.4" conf="default,regexp"/>
+    <dependency org="oro" name="oro" rev="2.0.8" conf="default,regexp"/>
+    <dependency org="org.apache.logging.log4j" name="log4j-1.2-api" rev="2.11.1" conf="default,logging"/>
+    <dependency org="commons-logging" name="commons-logging-api" rev="1.1" conf="default,logging"/>
+    <dependency org="jdepend" name="jdepend" rev="2.9.1" conf="default,jdepend"/>
+    <dependency org="com.github.jai-imageio" name="jai-imageio-core" rev="1.4.0" conf="default,imageio"/>
+    <dependency org="javax.media" name="jai-core" rev="1.1.3" conf="default,jai"/>
+    <dependency org="com.sun.media" name="jai-codec" rev="1.1.3" conf="default,jai"/>
+    <dependency org="tomcat" name="jasper-compiler" rev="4.1.36" conf="default,jspc"/>
+    <dependency org="tomcat" name="jasper-runtime" rev="4.1.36" conf="default,jspc"/>
+    <dependency org="javax.servlet" name="servlet-api" rev="2.3" conf="default,jspc"/>
+    <dependency org="xml-resolver" name="xml-resolver" rev="1.2" conf="default,xml"/>
+    <dependency org="xalan" name="xalan" rev="2.7.2" conf="default,xml"/>
+    <dependency org="antlr" name="antlr" rev="2.7.7" conf="default,antlr"/>
+    <dependency org="org.apache.bcel" name="bcel" rev="6.2" conf="default,bcel"/>
+    <dependency org="bsf" name="bsf" rev="2.4.0" conf="default,script"/>
+    <dependency org="org.beanshell" name="bsh" rev="2.0b5" conf="default,script"/>
+    <dependency org="org.python" name="jython" rev="2.7.0" conf="default,script,jython"/>
+    <dependency org="org.mozilla" name="rhino" rev="1.7.10" conf="default,script,rhino"/>
+    <dependency org="org.jruby" name="jruby" rev="1.6.8" conf="default,script,jruby"/>
+    <dependency org="org.codehaus.groovy" name="groovy-ant" rev="2.5.0" conf="default,script,groovy"/>
+    <dependency org="org.codehaus.groovy" name="groovy-bsf" rev="2.5.0" conf="default,script,groovy"/>
+    <dependency org="com.ibm.netrexx" name="com.springsource.com.ibm.netrexx" rev="2.0.5" conf="default,netrexx"/>
+    <dependency org="commons-net" name="commons-net" rev="3.6" conf="default,networking"/>
+    <dependency org="com.jcraft" name="jsch" rev="0.1.55" conf="default,networking"/>
+    <dependency org="com.sun.mail" name="javax.mail" rev="1.6.2" conf="default,javamail"/>
+    <dependency org="org.tukaani" name="xz" rev="1.8" conf="default,xz"/>
+    <dependency org="which" name="which" rev="1.0" conf="default,debugging"/>
+    <dependency org="junit" name="junit" rev="4.12" conf="junit,test"/>
+    <dependency org="org.junit.jupiter" name="junit-jupiter-engine" rev="5.2.0" conf="default,junit-engine-jupiter"/>
+    <dependency org="org.junit.vintage" name="junit-vintage-engine" rev="5.2.0" conf="default,junit-engine-vintage"/>
+    <dependency org="org.hamcrest" name="hamcrest-library" rev="1.3" conf="test"/>
+    <dependency org="org.apache.ant" name="ant-antunit" rev="1.4" conf="antunit,test"/>
+    <dependency org="org.apache.ivy" name="ivy" rev="2.4.0" conf="ivy;release->optional"/>
+    <exclude org="org.apache.ant" module="ant" conf="*"/>
+    <exclude org="org.apache.ant" module="ant-launcher" conf="*"/>
+    <exclude org="org.apache.ant" module="ant-nodeps" conf="*"/>
+    <exclude org="org.apache.ant" module="ant-trax" conf="*"/>
+    <exclude org="org.apache.ant" module="ant-junit" conf="*"/>
+    <exclude org="org.apache.ant" module="ant-antlr" conf="*"/>
+    <exclude org="com.jcraft" conf="release"/>
+    <exclude org="commons-codec" conf="release"/>
+    <exclude org="commons-httpclient" conf="release"/>
+    <exclude org="commons-logging" conf="release"/>
+    <exclude org="commons-vfs" conf="release"/>
+    <exclude org="oro" conf="release"/>
+  </dependencies>
+</ivy-module>
diff --git a/ivysettings.xml b/ivysettings.xml
new file mode 100644
index 0000000000..0c881383aa
--- /dev/null
+++ b/ivysettings.xml
@@ -0,0 +1,35 @@
+<!--
+   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.
+-->
+<ivysettings>
+  <settings defaultResolver="default"/>
+  <caches defaultCacheDir="${user.home}/.ivy2/cache"/>
+  <resolvers>
+    <filesystem name="local">
+      <ivy pattern="${ivy.cache.dir}/[module]/ivy-[revision].xml"/>
+      <artifact pattern="${ivy.cache.dir}/[module]/[artifact]-[revision](-[classifier]).[ext]"/>
+    </filesystem>
+    <ibiblio name="public" m2compatible="true"/>
+    <ibiblio name="jboss" m2compatible="true" root="https://repository.jboss.org/nexus/content/groups/public/"/>
+    <bintray name="bintray"/>
+    <chain name="default" returnFirst="true">
+      <resolver ref="local"/>
+      <resolver ref="public"/>
+      <resolver ref="jboss"/>
+      <resolver ref="bintray"/>
+    </chain>
+  </resolvers>
+</ivysettings>
diff --git a/release/ivy.xml b/release/ivy.xml
deleted file mode 100644
index 4069b700b7..0000000000
--- a/release/ivy.xml
+++ /dev/null
@@ -1,180 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   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
-
-       https://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.
--->
-<ivy-module version="2.0"
-            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-            xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
-  <info organisation="org/apache"
-        module="ant" revision="1.10.7"/>
-  <publications xmlns:e="urn:ant.apache.org:ivy-extras">
-    <artifact name="ant-parent" type="pom" ext="pom"/>
-    <artifact name="ant-parent" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant" type="pom" ext="pom"/>
-    <artifact name="ant" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant" type="jar" ext="jar"/>
-    <artifact name="ant" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant" type="javadoc" ext="jar" e:classifier="javadoc"/>
-    <artifact name="ant" type="javadoc.asc" ext="jar.asc" e:classifier="javadoc"/>
-    <artifact name="ant-antlr" type="pom" ext="pom"/>
-    <artifact name="ant-antlr" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-antlr" type="jar" ext="jar"/>
-    <artifact name="ant-antlr" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-antlr" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-antlr" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-apache-bcel" type="pom" ext="pom"/>
-    <artifact name="ant-apache-bcel" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-apache-bcel" type="jar" ext="jar"/>
-    <artifact name="ant-apache-bcel" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-bcel" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-apache-bcel" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-apache-bsf" type="pom" ext="pom"/>
-    <artifact name="ant-apache-bsf" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-apache-bsf" type="jar" ext="jar"/>
-    <artifact name="ant-apache-bsf" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-bsf" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-apache-bsf" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-apache-log4j" type="pom" ext="pom"/>
-    <artifact name="ant-apache-log4j" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-apache-log4j" type="jar" ext="jar"/>
-    <artifact name="ant-apache-log4j" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-log4j" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-apache-log4j" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-apache-oro" type="pom" ext="pom"/>
-    <artifact name="ant-apache-oro" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-apache-oro" type="jar" ext="jar"/>
-    <artifact name="ant-apache-oro" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-oro" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-apache-oro" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-apache-regexp" type="pom" ext="pom"/>
-    <artifact name="ant-apache-regexp" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-apache-regexp" type="jar" ext="jar"/>
-    <artifact name="ant-apache-regexp" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-regexp" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-apache-regexp" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-apache-resolver" type="pom" ext="pom"/>
-    <artifact name="ant-apache-resolver" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-apache-resolver" type="jar" ext="jar"/>
-    <artifact name="ant-apache-resolver" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-resolver" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-apache-resolver" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-apache-xalan2" type="pom" ext="pom"/>
-    <artifact name="ant-apache-xalan2" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-apache-xalan2" type="jar" ext="jar"/>
-    <artifact name="ant-apache-xalan2" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-apache-xalan2" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-apache-xalan2" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-commons-logging" type="pom" ext="pom"/>
-    <artifact name="ant-commons-logging" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-commons-logging" type="jar" ext="jar"/>
-    <artifact name="ant-commons-logging" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-commons-logging" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-commons-logging" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-commons-net" type="pom" ext="pom"/>
-    <artifact name="ant-commons-net" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-commons-net" type="jar" ext="jar"/>
-    <artifact name="ant-commons-net" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-commons-net" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-commons-net" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-imageio" type="pom" ext="pom"/>
-    <artifact name="ant-imageio" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-imageio" type="jar" ext="jar"/>
-    <artifact name="ant-imageio" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-imageio" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-imageio" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-jai" type="pom" ext="pom"/>
-    <artifact name="ant-jai" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-jai" type="jar" ext="jar"/>
-    <artifact name="ant-jai" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-jai" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-jai" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-javamail" type="pom" ext="pom"/>
-    <artifact name="ant-javamail" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-javamail" type="jar" ext="jar"/>
-    <artifact name="ant-javamail" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-javamail" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-javamail" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-jdepend" type="pom" ext="pom"/>
-    <artifact name="ant-jdepend" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-jdepend" type="jar" ext="jar"/>
-    <artifact name="ant-jdepend" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-jdepend" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-jdepend" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-jmf" type="pom" ext="pom"/>
-    <artifact name="ant-jmf" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-jmf" type="jar" ext="jar"/>
-    <artifact name="ant-jmf" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-jmf" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-jmf" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-jsch" type="pom" ext="pom"/>
-    <artifact name="ant-jsch" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-jsch" type="jar" ext="jar"/>
-    <artifact name="ant-jsch" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-jsch" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-jsch" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-junit" type="pom" ext="pom"/>
-    <artifact name="ant-junit" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-junit" type="jar" ext="jar"/>
-    <artifact name="ant-junit" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-junit" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-junit" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-junit4" type="pom" ext="pom"/>
-    <artifact name="ant-junit4" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-junit4" type="jar" ext="jar"/>
-    <artifact name="ant-junit4" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-junit4" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-junit4" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-junitlauncher" type="pom" ext="pom"/>
-    <artifact name="ant-junitlauncher" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-junitlauncher" type="jar" ext="jar"/>
-    <artifact name="ant-junitlauncher" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-junitlauncher" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-junitlauncher" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-launcher" type="pom" ext="pom"/>
-    <artifact name="ant-launcher" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-launcher" type="jar" ext="jar"/>
-    <artifact name="ant-launcher" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-launcher" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-launcher" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-netrexx" type="pom" ext="pom"/>
-    <artifact name="ant-netrexx" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-netrexx" type="jar" ext="jar"/>
-    <artifact name="ant-netrexx" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-netrexx" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-netrexx" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-swing" type="pom" ext="pom"/>
-    <artifact name="ant-swing" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-swing" type="jar" ext="jar"/>
-    <artifact name="ant-swing" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-swing" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-swing" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-testutil" type="pom" ext="pom"/>
-    <artifact name="ant-testutil" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-testutil" type="jar" ext="jar"/>
-    <artifact name="ant-testutil" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-testutil" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-testutil" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-    <artifact name="ant-xz" type="pom" ext="pom"/>
-    <artifact name="ant-xz" type="pom.asc" ext="pom.asc"/>
-    <artifact name="ant-xz" type="jar" ext="jar"/>
-    <artifact name="ant-xz" type="jar.asc" ext="jar.asc"/>
-    <artifact name="ant-xz" type="source" ext="jar" e:classifier="sources"/>
-    <artifact name="ant-xz" type="source.asc" ext="jar.asc" e:classifier="sources"/>
-  </publications>
-  <dependencies/>
-</ivy-module>
diff --git a/release/ivysettings.xml b/release/ivysettings.xml
index 24520c73df..aaf2e289bf 100644
--- a/release/ivysettings.xml
+++ b/release/ivysettings.xml
@@ -17,13 +17,45 @@
 <ivysettings>
   <credentials host="repository.apache.org" realm="Sonatype Nexus Repository Manager" username="${upload.user}" passwd="${upload.password}"/>
   <caches defaultCacheDir="${user.home}/.ivy2/cache"/>
+  <signers>
+    <pgp name="apache-sig" secring="${gpg.dir}/secring.gpg" password="${gpg.password}" keyId="${gpg.keyid}"/>
+  </signers>
+  <settings defaultResolver="default"/>
   <resolvers>
     <ibiblio name="public" m2compatible="true"/>
-    <url name="nexus">
-      <artifact pattern="${upload.url}/[organisation]/[module]/[artifact]/[revision]/[artifact]-[revision](-[classifier]).[ext]" />
+    <ibiblio name="jboss" m2compatible="true" root="https://repository.jboss.org/nexus/content/groups/public/"/>
+    <bintray name="bintray"/>
+    <chain name="default" returnFirst="true">
+      <resolver ref="public"/>
+      <resolver ref="jboss"/>
+      <resolver ref="bintray"/>
+    </chain>
+    <url name="nexus" signer="apache-sig">
+      <artifact pattern="${upload.url}/[orgPath]/[artifact]/[revision]/[artifact]-[revision](-[classifier]).[ext]"/>
     </url>
   </resolvers>
   <modules>
-   <module organisation="org.apache" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-antlr" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-apache-bcel" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-apache-bsf" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-apache-log4j" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-apache-oro" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-apache-regexp" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-apache-resolver" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-apache-xalan2" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-commons-logging" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-commons-net" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-jai" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-javamail" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-jdepend" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-jmf" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-jsch" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-junit" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-launcher" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-netrexx" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-swing" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-testutil" resolver="nexus"/>
+    <module organisation="org.apache.ant" name="ant-xz" resolver="nexus"/>
   </modules>
 </ivysettings>
diff --git a/release/upload.xml b/release/upload.xml
index cd058dc40d..f97a2d0097 100644
--- a/release/upload.xml
+++ b/release/upload.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0"?>
 <!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements.  See the NOTICE file distributed with
@@ -17,10 +18,24 @@
 <project name="upload" xmlns:ivy="antlib:org.apache.ivy.ant">
   <fail unless="upload.user" message="supply upload.user on the command line"/>
   <fail unless="upload.password" message="supply upload.password on the command line"/>
+  <fail unless="gpg.keyid" message="supply gpg.keyid on the command line"/>
+  <fail unless="gpg.password" message="supply gpg.password on the command line"/>
   <property name="upload.url" value="https://repository.apache.org/service/local/staging/deploy/maven2"/>
+  <condition property="gpg.dir" value="${user.home}/AppData/Roaming/gnupg">
+    <os family="windows"/>
+  </condition>
+  <property name="gpg.dir" location="${user.home}/.gnupg"/>
+  <property name="project.revision" value="1.10.2alpha"/>
+  <path id="ivy.and.gpg">
+    <fileset dir="../lib/optional">
+      <include name="ivy*.jar"/>
+      <include name="bcp*.jar"/>
+    </fileset>
+  </path>
+  <taskdef resource="org/apache/ivy/ant/antlib.xml" uri="antlib:org.apache.ivy.ant" classpathref="ivy.and.gpg"/>
   <ivy:configure file="ivysettings.xml"/>
-  <ivy:resolve file="ivy.xml"/>  
+  <ivy:resolve file="../ivy.xml"/>
   <ivy:retrieve/>
   <ivy:deliver/>
-  <ivy:publish publishivy="false" artifactspattern="${basedir}/../java-repository/[organisation]/[module]/[artifact]/[revision]/[artifact]-[revision](-[classifier]).[ext]" resolver="nexus"/>
-</project>
\ No newline at end of file
+  <ivy:publish publishivy="false" pubrevision="${project.revision}" artifactspattern="${basedir}/../java-repository/[orgPath]/[artifact]/[revision]/[artifact]-[revision](-[classifier]).[ext]" resolver="nexus"/>
+</project>
diff --git a/src/etc/poms/README.txt b/src/etc/poms/README.txt
index d282a6bd2a..9ab554b0ed 100644
--- a/src/etc/poms/README.txt
+++ b/src/etc/poms/README.txt
@@ -3,14 +3,11 @@ Building Ant with Maven
 
 The Ant jars can be built using Maven and the POMS present in this directory.
 
-Libs not available in the maven repository
+Libs not available in the Maven repository
 
 groupId          artifactId       version   comment
 com.bea          weblogic         8.1.3.0   download it
-com.bea          weblogicclasses  5.1       a newer version can do.
-jai              jai-core         1.1.2_01  fetch.xml
-jai              jai-codec        1.1.2.1   fetch.xml
-com.ibm.netrexx  netrexx          2.0.5     fetch.xml
+com.bea          weblogicclasses  5.1       a newer version can do
 com.starteam     starteam-sdk     5.2       the original file is called starteam-sdk.jar
 stylebook        stylebook        1.0-b2    the original file is called stylebook-1.0-b2.jar
 
@@ -34,14 +31,9 @@ mvn install -Dmaven.test.skip=true
 TODO :
 
  * see if the dependency to weblogicclasses.jar can be replaced by a dependency to some j2ee.jar from Sun,
-as it supplies some javax.ejb classes which are required at compile time.
+   as it supplies some javax.ejb classes which are required at compile time.
 
-PROBLEMS :
-
- * the unit tests cannot run properly, the maven-surefire-plugin sets a system property basedir
-which make a large part of our tests fail
-
- * JIRA issue https://issues.apache.org/jira/browse/SUREFIRE-184 asking the Maven colleagues to fix this. :-)
+ * surefire now allows setting a custom basedir, so tests no longer require system property "root" to be set
 
 REFERENCES :
 
diff --git a/src/etc/poms/ant-netrexx/pom.xml b/src/etc/poms/ant-netrexx/pom.xml
index fa993abc2f..6568d46536 100644
--- a/src/etc/poms/ant-netrexx/pom.xml
+++ b/src/etc/poms/ant-netrexx/pom.xml
@@ -43,16 +43,20 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/m
       <version>1.10.7-SNAPSHOT</version>
       <scope>compile</scope>
     </dependency>
-    <!-- Processed too early, before maven-antrun-plugin gets a chance to work:
     <dependency>
       <groupId>com.ibm.netrexx</groupId>
-      <artifactId>netrexx</artifactId>
+      <artifactId>com.springsource.com.ibm.netrexx</artifactId>
       <version>2.0.5</version>
-      <scope>system</scope>
-      <systemPath>${basedir}/../../../../lib/optional/NetRexxC.jar</systemPath>
+      <scope>compile</scope>
     </dependency>
-    -->
   </dependencies>
+  <repositories>
+    <repository>
+      <id>bintray</id>
+      <name>Bintray</name>
+      <url>https://jcenter.bintray.com/</url>
+    </repository>
+  </repositories>
   <build>
     <plugins>
       <plugin>