diff --git a/build-harness/bin/CliSupport.groovy b/build-harness/bin/CliSupport.groovy
deleted file mode 100644
index d68d4ea..0000000
--- a/build-harness/bin/CliSupport.groovy
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * 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.
- */
-
-//
-// $Rev$ $Date$
-//
-
-abstract class CliSupport
-{
-    def ant = new AntBuilder()
-    
-    def basedir = new File(System.getenv("BASEDIR")).getCanonicalFile()
-    
-    protected CliSupport() {
-        assert basedir != null
-        
-        // Enable emacs mode to disable [task] prefix on output
-        def p = ant.getAntProject()
-        p.getBuildListeners()[0].setEmacsMode(true)
-    }
-}
diff --git a/build-harness/bin/clean b/build-harness/bin/clean
deleted file mode 100755
index 39f255c..0000000
--- a/build-harness/bin/clean
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/sh
-##
-## 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.
-##
-
-##
-## $Rev$ $Date$
-##
-
-DIRNAME=`dirname $0`
-PROGNAME=`basename $0`
-
-if [ "x$1" = "x" ]; then
-    dir=`pwd`
-else
-    dir=`cd "$1" && pwd`
-fi
-echo "Cleaning $dir..."
-
-find "$dir" -name target | xargs rm -rfv | egrep "^removed directory:"
-
-# egrep will return non-zero if no match
-exit 0
diff --git a/build-harness/bin/collectassemblies b/build-harness/bin/collectassemblies
deleted file mode 100644
index 2cf069c..0000000
--- a/build-harness/bin/collectassemblies
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-##
-## 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.
-##
-
-##
-## $Rev$ $Date$
-##
-
-DIRNAME=`dirname $0`
-PROGNAME=`basename $0`
-
-. "$DIRNAME/groovy.shlib"
-
-groovy $@
-
diff --git a/build-harness/bin/collectassemblies.groovy b/build-harness/bin/collectassemblies.groovy
deleted file mode 100644
index 0c7addf..0000000
--- a/build-harness/bin/collectassemblies.groovy
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * 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.
- */
-
-//
-// $Rev$ $Date$
-//
-
-class AssemblyCollector
-    extends CliSupport
-{
-    def assembliesdir = new File(basedir, "assemblies")
-    
-    def main(args) {
-        def iter = args.toList().iterator()
-        def dir
-        
-        while (iter.hasNext()) {
-            def arg = iter.next()
-            
-            switch (arg) {
-                // HACK: Groovy's use of commons-cli eats up an '--' so need to use '---' to skip
-                case '---':
-                    while (iter.hasNext()) {
-                        args.add(iter.next())
-                    }
-                    break
-                
-                default:
-                    if (dir != null) {
-                        throw new Exception("Unexpected argument: ${arg}")
-                    }
-                    if (arg == ".") {
-                        dir = basedir
-                    }
-                    else {
-                        dir = new File(arg)
-                        if (!dir.isAbsolute()) {
-                            dir = new File(basedir, arg)
-                        }
-                    }
-                    break
-            }
-        }
-        
-        assert dir != null
-        
-        ant.mkdir(dir: assembliesdir)
-        
-        ant.copy(todir: assembliesdir, flatten: true) {
-            fileset(dir: dir) {
-                include(name: "**/target/*.zip")
-                include(name: "**/target/*.tar.gz")
-            }
-        }
-    }
-}
-
-new AssemblyCollector().main(args)
diff --git a/build-harness/bin/collectreports b/build-harness/bin/collectreports
deleted file mode 100755
index 2cf069c..0000000
--- a/build-harness/bin/collectreports
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-##
-## 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.
-##
-
-##
-## $Rev$ $Date$
-##
-
-DIRNAME=`dirname $0`
-PROGNAME=`basename $0`
-
-. "$DIRNAME/groovy.shlib"
-
-groovy $@
-
diff --git a/build-harness/bin/collectreports.groovy b/build-harness/bin/collectreports.groovy
deleted file mode 100644
index 3a3f2c0..0000000
--- a/build-harness/bin/collectreports.groovy
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * 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.
- */
-
-//
-// $Rev$ $Date$
-//
-
-class ReportCollector
-    extends CliSupport
-{
-    def reportsdir = new File(basedir, "reports/surefire")
-    
-    def main(args) {
-        def iter = args.toList().iterator()
-        def dir
-        
-        while (iter.hasNext()) {
-            def arg = iter.next()
-            
-            switch (arg) {
-                // HACK: Groovy's use of commons-cli eats up an '--' so need to use '---' to skip
-                case '---':
-                    while (iter.hasNext()) {
-                        args.add(iter.next())
-                    }
-                    break
-                
-                default:
-                    if (dir != null) {
-                        throw new Exception("Unexpected argument: ${arg}")
-                    }
-                    if (arg == ".") {
-                        dir = basedir
-                    }
-                    else {
-                        dir = new File(arg)
-                        if (!dir.isAbsolute()) {
-                            dir = new File(basedir, arg)
-                        }
-                    }
-                    break
-            }
-        }
-        
-        assert dir != null
-        
-        ant.mkdir(dir: reportsdir)
-        
-        ant.copy(todir: reportsdir, flatten: true) {
-            fileset(dir: dir) {
-                include(name: "**/target/surefire-reports/TEST-*.xml")
-            }
-        }
-    }
-}
-
-new ReportCollector().main(args)
diff --git a/build-harness/bin/groovy.shlib b/build-harness/bin/groovy.shlib
deleted file mode 100644
index e0def93..0000000
--- a/build-harness/bin/groovy.shlib
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/sh
-##
-## 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.
-##
-
-##
-## $Rev$ $Date$
-##
-
-export BINDIR=`cd "$DIRNAME" && pwd`
-export BASEDIR=`cd "$BINDIR/.." && pwd`
-
-export GROOVY_HOME="$BASEDIR/groovy"
-GROOVY="$GROOVY_HOME/bin/groovy"
-
-# Make sure we can exec it
-chmod +x "$GROOVY"
-
-# Use 1.5 for Groovy
-export JAVA_HOME="$JAVA_HOME_1_5"
-
-# Display the current environment
-# set
-
-groovy() {
-    cd "$BINDIR"
-    exec "$GROOVY" "$PROGNAME.groovy" $*
-    
-    ##
-    ## NOTE: Can't capture logs like this, as we need to preserve the return value
-    ##
-    
-    # | 2>&1 tee "$BASEDIR/$PROGNAME.log"
-}
-
diff --git a/build-harness/bin/maven b/build-harness/bin/maven
deleted file mode 100755
index 2cf069c..0000000
--- a/build-harness/bin/maven
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/sh
-##
-## 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.
-##
-
-##
-## $Rev$ $Date$
-##
-
-DIRNAME=`dirname $0`
-PROGNAME=`basename $0`
-
-. "$DIRNAME/groovy.shlib"
-
-groovy $@
-
diff --git a/build-harness/bin/maven.groovy b/build-harness/bin/maven.groovy
deleted file mode 100644
index ac48bdc..0000000
--- a/build-harness/bin/maven.groovy
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * 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.
- */
-
-//
-// $Rev$ $Date$
-//
-
-class MavenBuilder
-    extends CliSupport
-{
-    def repodir = new File(basedir, "repository")
-    
-    def javaHome = System.getenv("JAVA_HOME")
-    
-    def mavenOpts = System.getenv("MAVEN_OPTS")
-    
-    int timeout
-    
-    def setMavenOptions(options) {
-        mavenOpts = "${mavenOpts}"
-    }
-    
-    def setJavaVersion(ver) {
-        def tmp = ver.replace(".", "_")
-        def dir = System.getenv("JAVA_HOME_${tmp}")
-        if (dir == null) {
-            throw new Exception("Unable to use Java ${ver}; missing JAVA_HOME_${tmp}")
-        }
-        
-        println("Using JAVA_HOME: ${dir}")
-        
-        this.javaHome = dir
-    }
-    
-    def main(args) {
-        def iter = args.toList().iterator()
-        args = []
-        def pom
-        
-        while (iter.hasNext()) {
-            def arg = iter.next()
-            
-            switch (arg) {
-                case [ '-j', '--java' ]:
-                    setJavaVersion(iter.next())
-                    break
-                
-                case '--mvnopts':
-                    setMavenOptions(iter.next())
-                    break
-                
-                case '--timeout':
-                    timeout = Integer.parseInt(iter.next())
-                    break
-                
-                // HACK: Groovy's use of commons-cli eats up an '--' so need to use '---' to skip
-                case '---':
-                    while (iter.hasNext()) {
-                        args.add(iter.next())
-                    }
-                    break
-                
-                //
-                // TODO: Add bits to pick off -P* so we can always insert a profile to activate
-                //
-                
-                case ~"-.*":
-                    args.add(arg)
-                    break
-                
-                default:
-                    if (pom != null) {
-                        throw new Exception("Unexpected argument: ${arg}")
-                    }
-                    pom = new File(arg)
-                    if (!pom.isAbsolute()) {
-                        pom = new File(basedir, arg)
-                    }
-                    break
-            }
-        }
-        
-        if (pom == null) {
-            throw new Exception("Missing pom")
-        }
-        
-        try {
-            maven(pom, args)
-        }
-        catch (Throwable t) {
-            println "ERROR: ${t}"
-            // t.printStackTrace()
-            System.exit(1)
-        }
-    }
-    
-    def maven(pom, args) {
-        assert pom != null
-        assert args != null
-        
-        if (javaHome == null) {
-            throw new Exception("Please define JAVA_HOME; or use --java <ver>")
-        }
-        
-        println "Using local repo: ${repodir}"
-        
-        ant.exec(executable: "mvn", dir: basedir, failonerror: true) {
-            // Get a reference to the current node so we can conditionally set attributes
-            def node = current.wrapper
-            
-            // Maybe set timeout
-            if (timeout > 0) {
-                println("Timeout after: ${timeout} seconds");
-                def millis = timeout * 1000
-                node.setAttribute('timeout', "${millis}")
-            }
-            
-            arg(value: "-Dmaven.repo.local=${repodir}")
-            arg(value: '--batch-mode')
-            arg(value: '--errors')
-            
-            arg(value: '--file')
-            arg(file: "${pom}")
-            
-            args.each {
-                arg(value: "${it}")
-            }
-            
-            env(key: "JAVA_HOME", file: javaHome)
-            
-            if (mavenOpts != null) {
-                env(key: "MAVEN_OPTS", value: mavenOpts)
-            }
-        }
-    }
-}
-
-new MavenBuilder().main(args)
diff --git a/build-harness/groovy/bin/groovy b/build-harness/groovy/bin/groovy
deleted file mode 100755
index 6faf5eb..0000000
--- a/build-harness/groovy/bin/groovy
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/sh
-##############################################################################
-##                                                                          ##
-##  Groovy JVM Bootstrap for UN*X                                           ##
-##                                                                          ##
-##  use -cp or -classpath just as in java to use a custom classpath         ##
-##                                                                          ##
-##############################################################################
-
-##
-## $Revision: 1.13 $ $Date: 2005/08/29 10:49:42 $
-##
-
-. `dirname "$0"`/startGroovy
-
-startGroovy groovy.ui.GroovyMain "$@"
-
diff --git a/build-harness/groovy/bin/groovy.bat b/build-harness/groovy/bin/groovy.bat
deleted file mode 100755
index e80c56f..0000000
--- a/build-harness/groovy/bin/groovy.bat
+++ /dev/null
@@ -1,18 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-
-@rem 
-@rem $Revision$ $Date$
-@rem 
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-:begin
-@rem Determine what directory it is in.
-set DIRNAME=%~dp0
-if "%DIRNAME%" == "" set DIRNAME=.\
-
-"%DIRNAME%\startGroovy.bat" "%DIRNAME%" groovy.ui.GroovyMain %*
-
-@rem End local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" endlocal
diff --git a/build-harness/groovy/bin/startGroovy b/build-harness/groovy/bin/startGroovy
deleted file mode 100755
index 916ff69..0000000
--- a/build-harness/groovy/bin/startGroovy
+++ /dev/null
@@ -1,194 +0,0 @@
-##############################################################################
-##                                                                          ##
-##  Groovy JVM Bootstrap for UN*X                                           ##
-##                                                                          ##
-##############################################################################
-
-##
-## $Revision: 1.2 $ $Date: 2005/09/02 00:24:44 $
-##
-
-PROGNAME=`basename "$0"`
-DIRNAME=`dirname "$0"`
-
-# Use the maximum available, or set MAX_FD != -1 to use that
-MAX_FD="maximum"
-
-warn() {
-    echo "${PROGNAME}: $*"
-}
-
-die() {
-    warn "$*"
-    exit 1
-}
-
-# OS specific support (must be 'true' or 'false').
-cygwin=false;
-darwin=false;
-case "`uname`" in
-    CYGWIN*)
-        cygwin=true
-        ;;
-        
-    Darwin*)
-        darwin=true
-        ;;
-esac
-
-if [ "$1" = "-cp" ] || [ "$1" = "-classpath" ]; then
-  CP=$2
-  shift 2
-fi
-
-# Attempt to set JAVA_HOME if it's not already set
-if [ -z "$JAVA_HOME" ]; then
-	
-	# Set JAVA_HOME for Darwin
-	if $darwin; then
-		
-		[ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] &&
-			export JAVA_HOME="/Library/Java/Home"
-			
-		[ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] &&
-			export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home"
-		
-	fi
-	
-fi
-
-# For Cygwin, ensure paths are in UNIX format before anything is touched
-if $cygwin ; then
-    [ -n "$GROOVY_HOME" ] &&
-        GROOVY_HOME=`cygpath --unix "$GROOVY_HOME"`
-    [ -n "$JAVACMD" ] &&
-        JAVACMD=`cygpath --unix "$JAVACMD"`
-    [ -n "$JAVA_HOME" ] &&
-        JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
-    [ -n "$CP" ] &&
-        CP=`cygpath --path --unix "$CP"`
-fi
-
-# Locate GROOVY_HOME if not it is not set
-if [ -z "$GROOVY_HOME" -o ! -d "$GROOVY_HOME" ] ; then
-  # resolve links - $0 may be a link to groovy's home
-  PRG="$0"
-
-  # need this for relative symlinks
-  while [ -h "$PRG" ] ; do
-    ls=`ls -ld "$PRG"`
-    link=`expr "$ls" : '.*-> \(.*\)$'`
-    if expr "$link" : '/.*' > /dev/null; then
-    PRG="$link"
-    else
-    PRG=`dirname "$PRG"`"/$link"
-    fi
-  done
-
-  SAVED="`pwd`"
-  cd "`dirname \"$PRG\"`/.."
-  GROOVY_HOME="`pwd -P`"
-  cd "$SAVED"
-fi
-
-# Use default groovy-conf config
-if [ -z "$GROOVY_CONF" ]; then
-    GROOVY_CONF="$GROOVY_HOME/conf/groovy-starter.conf"
-fi
-STARTER_CLASSPATH="$GROOVY_HOME/lib/groovy-starter.jar:$CLASSPATH"
-
-# Create the final classpath
-if [ -n "$CP" ]; then
-  CP=$CP:$STARTER_CLASSPATH:.
-else
-  CP=$STARTER_CLASSPATH:.
-fi
-
-# Determine the Java command to use to start the JVM
-if [ -z "$JAVACMD" ]; then
-    if [ -n "$JAVA_HOME" ]; then
-        if [ -x "$JAVA_HOME/jre/sh/java" ]; then
-            # IBM's JDK on AIX uses strange locations for the executables
-            JAVACMD="$JAVA_HOME/jre/sh/java"
-        else
-            JAVACMD="$JAVA_HOME/bin/java"
-        fi
-    else
-        JAVACMD="java"
-    fi
-fi
-if [ ! -x "$JAVACMD" ]; then
-    die "JAVA_HOME is not defined correctly; can not execute: $JAVACMD"
-fi
-if [ -z "$JAVA_HOME" ] ; then
-    warn "JAVA_HOME environment variable is not set"
-fi
-
-# Increase the maximum file descriptors if we can
-if [ "$cygwin" = "false" ]; then
-    MAX_FD_LIMIT=`ulimit -H -n`
-    if [ $? -eq 0 ]; then
-        if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ]; then
-            # use the businessSystem max
-            MAX_FD="$MAX_FD_LIMIT"
-        fi
-        
-        ulimit -n $MAX_FD
-        if [ $? -ne 0 ]; then
-            warn "Could not set maximum file descriptor limit: $MAX_FD"
-        fi
-    else
-        warn "Could not query businessSystem maximum file descriptor limit: $MAX_FD_LIMIT"
-    fi
-fi
-
-# Setup Profiler
-useprofiler=false
-if [ "x$PROFILER" != "x" ]; then
-    if [ -r "$PROFILER" ]; then
-        . $PROFILER
-        useprofiler=true
-    else
-        die "Profiler file not found: $PROFILER"
-    fi
-fi
-
-# For Darwin, use classes.jar for TOOLS_JAR
-TOOLS_JAR="$JAVA_HOME/lib/tools.jar"
-#if $darwin; then
-#    TOOLS_JAR="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Classes/classes.jar"
-#fi
-
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin; then
-    GROOVY_HOME=`cygpath --path --windows "$GROOVY_HOME"`
-    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
-    GROOVY_CONF=`cygpath --path --windows "$GROOVY_CONF"`
-    CP=`cygpath --path --windows "$CP"`
-    TOOLS_JAR=`cygpath --path --windows "$TOOLS_JAR"`
-    STARTER_CLASSPATH=`cygpath --path --windows "$STARTER_CLASSPATH"`
-fi
-
-STARTER_MAIN_CLASS=org.codehaus.groovy.tools.GroovyStarter
-
-startGroovy() {
-  CLASS=$1
-  shift
-  
-  # Start the Profiler or the JVM
-  if $useprofiler; then
-      runProfiler
-  else
-      exec "$JAVACMD" $JAVA_OPTS \
-          -classpath "$STARTER_CLASSPATH" \
-          -Dprogram.name="$PROGNAME" \
-          -Dgroovy.starter.conf="$GROOVY_CONF" \
-          -Dgroovy.home="$GROOVY_HOME" \
-          -Dtools.jar="$TOOLS_JAR" \
-          $STARTER_MAIN_CLASS \
-          --main $CLASS \
-          --conf "$GROOVY_CONF" \
-          --classpath "$CP" \
-          "$@"
-  fi
-}
diff --git a/build-harness/groovy/bin/startGroovy.bat b/build-harness/groovy/bin/startGroovy.bat
deleted file mode 100755
index 9cb22af..0000000
--- a/build-harness/groovy/bin/startGroovy.bat
+++ /dev/null
@@ -1,120 +0,0 @@
-@if "%DEBUG%" == "" @echo off
-@rem ##########################################################################
-@rem                                                                         ##
-@rem  Groovy JVM Bootstrap for Windowz                                       ##
-@rem                                                                         ##
-@rem ##########################################################################
-
-@rem 
-@rem $Revision$ $Date$
-@rem 
-
-@rem Set local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" setlocal
-
-set DIRNAME=%~1
-shift
-
-set CLASS=%~1
-shift
-
-@rem Determine the command interpreter to execute the "CD" later
-set COMMAND_COM="cmd.exe"
-if exist "%SystemRoot%\system32\cmd.exe" set COMMAND_COM="%SystemRoot%\system32\cmd.exe"
-if exist "%SystemRoot%\command.com" set COMMAND_COM="%SystemRoot%\command.com"
-
-@rem Use explicit find.exe to prevent cygwin and others find.exe from being used
-set FIND_EXE="find.exe"
-if exist "%SystemRoot%\system32\find.exe" set FIND_EXE="%SystemRoot%\system32\find.exe"
-if exist "%SystemRoot%\command\find.exe" set FIND_EXE="%SystemRoot%\command\find.exe"
-
-:check_JAVA_HOME
-@rem Make sure we have a valid JAVA_HOME
-if not "%JAVA_HOME%" == "" goto have_JAVA_HOME
-
-echo.
-echo ERROR: Environment variable JAVA_HOME has not been set.
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-echo.
-goto end
-
-:have_JAVA_HOME
-@rem Validate JAVA_HOME
-%COMMAND_COM% /C DIR "%JAVA_HOME%" 2>&1 | %FIND_EXE% /I /C "%JAVA_HOME%" >nul
-if not errorlevel 1 goto check_GROOVY_HOME
-
-echo.
-echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
-echo.
-echo Please set the JAVA_HOME variable in your environment to match the
-echo location of your Java installation.
-echo.
-goto end
-
-:check_GROOVY_HOME
-@rem Define GROOVY_HOME if not set
-if "%GROOVY_HOME%" == "" set GROOVY_HOME=%DIRNAME%..
-
-@rem classpath handling
-set CP=
-if "x%~1" == "x-cp" set CP=%~2
-if "x%~1" == "x-classpath" set CP=%~2
-if "x" == "x%CP%" goto init
-shift 
-shift
- 
-:init
-@rem Get command-line arguments, handling Windowz variants
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.  
-set CMD_LINE_ARGS=
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
-shift
-goto win9xME_args_slurp
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
-:execute
-@rem Setup the command line
-set STARTER_CLASSPATH=%GROOVY_HOME%\lib\groovy-starter.jar;%CLASSPATH%
-
-if "x" == "x%CP%" goto empty_cp
-:non_empty_cp
-set CP=%STARTER_CLASSPATH%;%CP%;.
-goto after_cp
-:empty_cp
-set CP=%STARTER_CLASSPATH%;.
-:after_cp
-
-set STARTER_MAIN_CLASS=org.codehaus.groovy.tools.GroovyStarter
-set STARTER_CONF=%GROOVY_HOME%\conf\groovy-starter.conf
-
-set JAVA_EXE=%JAVA_HOME%\bin\java.exe
-set TOOLS_JAR=%JAVA_HOME%\lib\tools.jar
-
-if "%JAVA_OPTS%" == "" set JAVA_OPTS="-Xmx128m"
-set JAVA_OPTS=%JAVA_OPTS% -Dprogram.name="%PROGNAME%"
-set JAVA_OPTS=%JAVA_OPTS% -Dgroovy.home=%GROOVY_HOME%
-set JAVA_OPTS=%JAVA_OPTS% -Dtools.jar="%TOOLS_JAR%"
-set JAVA_OPTS=%JAVA_OPTS% -Dgroovy.starter.conf="%STARTER_CONF%"
-
-@rem Execute Groovy
-"%JAVA_EXE%" %JAVA_OPTS% -classpath "%STARTER_CLASSPATH%" %STARTER_MAIN_CLASS% --main %CLASS% --conf %STARTER_CONF% --classpath "%CP%" %CMD_LINE_ARGS%
-
-:end
-@rem End local scope for the variables with windows NT shell
-if "%OS%"=="Windows_NT" endlocal
-
-@rem Optional pause the batch file
-if "%GROOVY_BATCH_PAUSE%" == "on" pause
-
diff --git a/build-harness/groovy/conf/groovy-starter.conf b/build-harness/groovy/conf/groovy-starter.conf
deleted file mode 100644
index 86fcf1f..0000000
--- a/build-harness/groovy/conf/groovy-starter.conf
+++ /dev/null
@@ -1,27 +0,0 @@
-##############################################################################
-##                                                                          ##
-##  Groovy Shell Classworlds Configuration                                  ##
-##                                                                          ##
-##############################################################################
-
-##
-## $Revision$ $Date$
-##
-
-# The main entry-point
-#main is groovy.ui.GroovyMain
-
-    # Allow access to resources
-    load ${groovy.home}/conf
-    
-    # Load required libraries
-    load ${groovy.home}/lib/*.jar
-
-    # load user specific libraries
-    load ${user.home}/.groovy/lib/*
-
-    # load tools.jar
-    load ${tools.jar}
-    
-    # load the classpath too, to prevent the app loader to load script classes
-    load ${java.classpath}
\ No newline at end of file
diff --git a/build-harness/groovy/lib/ant-1.6.5.jar b/build-harness/groovy/lib/ant-1.6.5.jar
deleted file mode 100644
index 3beb3b8..0000000
--- a/build-harness/groovy/lib/ant-1.6.5.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/ant-junit-1.6.5.jar b/build-harness/groovy/lib/ant-junit-1.6.5.jar
deleted file mode 100644
index 5ee4f7f..0000000
--- a/build-harness/groovy/lib/ant-junit-1.6.5.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/ant-launcher-1.6.5.jar b/build-harness/groovy/lib/ant-launcher-1.6.5.jar
deleted file mode 100644
index 1a71612..0000000
--- a/build-harness/groovy/lib/ant-launcher-1.6.5.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/antlr-2.7.5.jar b/build-harness/groovy/lib/antlr-2.7.5.jar
deleted file mode 100644
index fbe5e3c..0000000
--- a/build-harness/groovy/lib/antlr-2.7.5.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/asm-2.2.jar b/build-harness/groovy/lib/asm-2.2.jar
deleted file mode 100644
index d4de0ec..0000000
--- a/build-harness/groovy/lib/asm-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/asm-analysis-2.2.jar b/build-harness/groovy/lib/asm-analysis-2.2.jar
deleted file mode 100644
index e318c53..0000000
--- a/build-harness/groovy/lib/asm-analysis-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/asm-attrs-2.2.jar b/build-harness/groovy/lib/asm-attrs-2.2.jar
deleted file mode 100644
index e812ad5..0000000
--- a/build-harness/groovy/lib/asm-attrs-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/asm-tree-2.2.jar b/build-harness/groovy/lib/asm-tree-2.2.jar
deleted file mode 100644
index acf9564..0000000
--- a/build-harness/groovy/lib/asm-tree-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/asm-util-2.2.jar b/build-harness/groovy/lib/asm-util-2.2.jar
deleted file mode 100644
index 728125d..0000000
--- a/build-harness/groovy/lib/asm-util-2.2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/axion-1.0-M3-dev.jar b/build-harness/groovy/lib/axion-1.0-M3-dev.jar
deleted file mode 100644
index ef5c4eb..0000000
--- a/build-harness/groovy/lib/axion-1.0-M3-dev.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/bsf-2.3.0-rc1.jar b/build-harness/groovy/lib/bsf-2.3.0-rc1.jar
deleted file mode 100644
index caa4dea..0000000
--- a/build-harness/groovy/lib/bsf-2.3.0-rc1.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/cglib-nodep-2.1.jar b/build-harness/groovy/lib/cglib-nodep-2.1.jar
deleted file mode 100644
index a07bc39..0000000
--- a/build-harness/groovy/lib/cglib-nodep-2.1.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/commons-cli-1.0.jar b/build-harness/groovy/lib/commons-cli-1.0.jar
deleted file mode 100644
index 22a004e..0000000
--- a/build-harness/groovy/lib/commons-cli-1.0.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/commons-collections-3.0-dev2.jar b/build-harness/groovy/lib/commons-collections-3.0-dev2.jar
deleted file mode 100644
index 5fa261b..0000000
--- a/build-harness/groovy/lib/commons-collections-3.0-dev2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/commons-httpclient-3.0-rc3.jar b/build-harness/groovy/lib/commons-httpclient-3.0-rc3.jar
deleted file mode 100644
index c175840..0000000
--- a/build-harness/groovy/lib/commons-httpclient-3.0-rc3.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/commons-logging-1.0.3.jar b/build-harness/groovy/lib/commons-logging-1.0.3.jar
deleted file mode 100644
index b99c937..0000000
--- a/build-harness/groovy/lib/commons-logging-1.0.3.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/groovy-1.0-JSR-06.jar b/build-harness/groovy/lib/groovy-1.0-JSR-06.jar
deleted file mode 100644
index b4ab54d..0000000
--- a/build-harness/groovy/lib/groovy-1.0-JSR-06.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/groovy-starter.jar b/build-harness/groovy/lib/groovy-starter.jar
deleted file mode 100644
index 1d5f2ab..0000000
--- a/build-harness/groovy/lib/groovy-starter.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/jarjar-0.6.jar b/build-harness/groovy/lib/jarjar-0.6.jar
deleted file mode 100644
index c7dc64b..0000000
--- a/build-harness/groovy/lib/jarjar-0.6.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/jmock-1.0.1.jar b/build-harness/groovy/lib/jmock-1.0.1.jar
deleted file mode 100644
index e774359..0000000
--- a/build-harness/groovy/lib/jmock-1.0.1.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/jmock-cglib-1.0.1.jar b/build-harness/groovy/lib/jmock-cglib-1.0.1.jar
deleted file mode 100644
index 494fa64..0000000
--- a/build-harness/groovy/lib/jmock-cglib-1.0.1.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/junit-3.8.1.jar b/build-harness/groovy/lib/junit-3.8.1.jar
deleted file mode 100644
index 674d71e..0000000
--- a/build-harness/groovy/lib/junit-3.8.1.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/mockobjects-core-0.09.jar b/build-harness/groovy/lib/mockobjects-core-0.09.jar
deleted file mode 100644
index 71b351f..0000000
--- a/build-harness/groovy/lib/mockobjects-core-0.09.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/mx4j-2.0-beta-1.jar b/build-harness/groovy/lib/mx4j-2.0-beta-1.jar
deleted file mode 100644
index 360943a..0000000
--- a/build-harness/groovy/lib/mx4j-2.0-beta-1.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/nekohtml-0.7.7.jar b/build-harness/groovy/lib/nekohtml-0.7.7.jar
deleted file mode 100644
index 7b3b868..0000000
--- a/build-harness/groovy/lib/nekohtml-0.7.7.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/openejb-loader-0.9.2.jar b/build-harness/groovy/lib/openejb-loader-0.9.2.jar
deleted file mode 100644
index 33a690f..0000000
--- a/build-harness/groovy/lib/openejb-loader-0.9.2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/qdox-1.3.jar b/build-harness/groovy/lib/qdox-1.3.jar
deleted file mode 100644
index 8e1f530..0000000
--- a/build-harness/groovy/lib/qdox-1.3.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/radeox-0.9.jar b/build-harness/groovy/lib/radeox-0.9.jar
deleted file mode 100644
index 5842c78..0000000
--- a/build-harness/groovy/lib/radeox-0.9.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/radeox-oro-0.9.jar b/build-harness/groovy/lib/radeox-oro-0.9.jar
deleted file mode 100644
index ed6c60a..0000000
--- a/build-harness/groovy/lib/radeox-oro-0.9.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/regexp-1.2.jar b/build-harness/groovy/lib/regexp-1.2.jar
deleted file mode 100644
index 713441c..0000000
--- a/build-harness/groovy/lib/regexp-1.2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/servletapi-2.3.jar b/build-harness/groovy/lib/servletapi-2.3.jar
deleted file mode 100644
index cd5b351..0000000
--- a/build-harness/groovy/lib/servletapi-2.3.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/xerces-2.4.0.jar b/build-harness/groovy/lib/xerces-2.4.0.jar
deleted file mode 100644
index bff9af0..0000000
--- a/build-harness/groovy/lib/xerces-2.4.0.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/xml-apis-1.0.b2.jar b/build-harness/groovy/lib/xml-apis-1.0.b2.jar
deleted file mode 100644
index ad33a5a..0000000
--- a/build-harness/groovy/lib/xml-apis-1.0.b2.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/xpp3-1.1.3.4-RC8_min.jar b/build-harness/groovy/lib/xpp3-1.1.3.4-RC8_min.jar
deleted file mode 100644
index 1864783..0000000
--- a/build-harness/groovy/lib/xpp3-1.1.3.4-RC8_min.jar
+++ /dev/null
Binary files differ
diff --git a/build-harness/groovy/lib/xstream-1.1.1.jar b/build-harness/groovy/lib/xstream-1.1.1.jar
deleted file mode 100644
index 5183123..0000000
--- a/build-harness/groovy/lib/xstream-1.1.1.jar
+++ /dev/null
Binary files differ
