ICU-21078 Adding script and updating docs for CLDR jars
diff --git a/tools/cldr/cldr-to-icu/README.txt b/tools/cldr/cldr-to-icu/README.txt
index 1b5a493..ec9ce25 100644
--- a/tools/cldr/cldr-to-icu/README.txt
+++ b/tools/cldr/cldr-to-icu/README.txt
@@ -16,11 +16,23 @@
 Important directories
 ---------------------
 
-<CLDR_DIR>  = The top-level directory for the CLDR production data (typically
-              the "production" directory in the staging repository).
+CLDR_ROOT = The top-level direcetory for the CLDR project, containing CLDR
+            code and non-production data. Usually obtained from:
+            https://github.com/unicode-org/cldr
+
+CLDR_DIR  = The top-level directory for the CLDR production data (typically
+            the "production" directory in the staging repository). Usually
+            obtained from:
+            https://github.com/unicode-org/cldr-staging/tree/master/production
+
+In Posix systems, it's best to set these as exported shell variables, and any
+following instructions assume they have been set accordingly:
+
+$ export CLDR_ROOT=/path/to/cldr
+$ export CLDR_DIR=/path/to/cldr-staging/production
 
 Note that you should not attempt to use data from the CLDR project directory
-(were the CLDR API code exists) for conversion into ICU data. The process now
+(where the CLDR API code exists) for conversion into ICU data. The process now
 relies on a pre-processing step, and the CLDR data must come from the separate
 "staging" repository (i.e. https://github.com/unicode-org/cldr-staging) or be
 pre-processed locally into a different directory.
@@ -30,24 +42,28 @@
 -------------
 
 This project relies on the Maven build tool for managing dependencies and uses
-Ant for configuration purposes, so both will need to be installed. On a debian
+Ant for configuration purposes, so both will need to be installed. On a Debian
 based system, this should be as simple as:
 
 $ sudo apt-get install maven ant
 
-You also need to follow the instructions in lib/README.txt to install the CLDR
-JAR files, which contain the CLDR API used by these tools. This step will only
-need to be repeated if you update the code in the CLDR project you are using.
+You also need to install two additional CLDR JAR files in a local Maven
+repository, which can be achieved by either running:
+
+$ install-cldr-jars.sh "$CLDR_ROOT"
+
+from this directory, or following the instructions in lib/README.txt. This
+step must be repeated if you update the code in the CLDR project you are
+using, or are using multiple versions of the CLDR code during development.
 
 Generating all ICU data
 -----------------------
 
-$ export CLDR_DIR="<CLDR_DIR>"
 $ ant -f build-icu-data.xml
 
 
-Other Examples (assuming CLDR_DIR is set)
------------------------------------------
+Other Examples
+--------------
 
 * Outputting a subset of the supplemental data into a specified directory:
 
diff --git a/tools/cldr/cldr-to-icu/install-cldr-jars.sh b/tools/cldr/cldr-to-icu/install-cldr-jars.sh
new file mode 100755
index 0000000..9c09916
--- /dev/null
+++ b/tools/cldr/cldr-to-icu/install-cldr-jars.sh
@@ -0,0 +1,113 @@
+#!/bin/bash -u
+#
+# This script will attempt to build and install the necessary CLDR JAR files
+# from a given CLDR installation root directory. The JAR files are installed
+# according to the manual instructions given in README.txt and lib/README.txt.
+#
+# The user must have installed both 'ant' and 'maven' in accordance with the
+# instructions in README.txt before attempting to run this script.
+#
+# Usage (from the directory of this script):
+#
+# ./install-cldr-jars.sh <CLDR-root-directory>
+
+# Exit with a message for fatal errors.
+function die() {
+  echo "$1"
+  echo "Exiting..."
+  exit 1
+} >&2
+
+# Runs a given command and captures output to the global log file.
+# If a command errors, the user can then view the log file.
+function run_with_logging() {
+  echo >> "${LOG_FILE}"
+  echo "Running: ${@}" >> "${LOG_FILE}"
+  echo "----------------------------------------------------------------" >> "${LOG_FILE}"
+  "${@}" >> "${LOG_FILE}" 2>&1
+  if (( $? != 0 )) ; then
+    echo "---- Previous command failed ----" >> "${LOG_FILE}"
+    echo "Error running: ${@}"
+    read -p "Show log file? " -n 1 -r
+    echo
+    if [[ "${REPLY}" =~ ^[Yy]$ ]] ; then
+      less -X "${LOG_FILE}"
+    fi
+    mv -f "${LOG_FILE}" "${ROOT_DIR}/last_log.txt"
+    echo "Log file: ${ROOT_DIR}/last_log.txt"
+    exit 1
+  fi
+  echo "---- Previous command succeeded ----" >> "${LOG_FILE}"
+}
+
+# First require that we are run from the same directory as the script.
+ROOT_DIR="$(realpath $(dirname $0))"
+if [[ "${ROOT_DIR}" != "$(realpath ${PWD})" ]] ; then
+  echo "WARNING: Shell script should be run from the project root directory"
+  echo "Current directory:"
+  echo "  ${PWD}"
+  echo "Project root direcory (where this script is):"
+  echo "  ${ROOT_DIR}"
+  read -p "Change to project root and continue? " -n 1 -r
+  echo
+  [[ "${REPLY}" =~ ^[Yy]$ ]] || die "Script must be run from the project root directory"
+  cd "$ROOT_DIR"
+fi
+
+# Check for some expected environmental things early.
+which ant > /dev/null || die "Cannot find Ant executable 'ant' in the current path."
+which mvn > /dev/null || die "Cannot find Maven executable 'mvn' in the current path."
+[[ -d "lib" ]] || die "Cannot find expected 'lib' directory in: $PWD"
+
+# Check there's one argument that points at a directory (or a symbolic link to a directory).
+(( $# == 1 )) && [[ -d "$1" ]] || die "Usage: ./install-cldr-jars.sh <CLDR-root-directory>"
+
+# Set up a log file (and be nice about tidying it up).
+LOG_FILE="$(tempfile)" || die "Cannot create temporary file!"
+trap "rm -f -- '${LOG_FILE}'" EXIT
+echo "---- LOG FILE ---- $(date '+%F %T') ----" >> "${LOG_FILE}"
+
+# Build the cldr.jar in the CLDR tools directory.
+CLDR_TOOLS_DIR="$1/tools/java"
+pushd "${CLDR_TOOLS_DIR}" > /dev/null || die "Cannot change directory to: ${CLDR_TOOLS_DIR}"
+
+echo "Building CLDR JAR file..."
+run_with_logging ant -f ./build.xml clean jar
+[[ -f "cldr.jar" ]] || die "Error creating cldr.jar file"
+[[ -f "libs/utilities.jar" ]] || die "Cannot find libs/utilities.jar"
+
+popd > /dev/null
+
+# Install both required CLDR jars in the lib/ directory.
+pushd "${ROOT_DIR}/lib" > /dev/null || die "Cannot change to lib directory"
+
+# The -B flag is "batch" mode and won't mess about with escape codes in the log file.
+echo "Installing CLDR JAR file..."
+run_with_logging mvn -B install:install-file \
+  -DgroupId=org.unicode.cldr \
+  -DartifactId=cldr-api \
+  -Dversion=0.1-SNAPSHOT \
+  -Dpackaging=jar \
+  -DgeneratePom=true \
+  -DlocalRepositoryPath=. \
+  -Dfile="${CLDR_TOOLS_DIR}/cldr.jar"
+
+echo "Installing CLDR utilities JAR file..."
+run_with_logging mvn -B install:install-file \
+  -DgroupId=com.ibm.icu \
+  -DartifactId=icu-utilities \
+  -Dversion=0.1-SNAPSHOT \
+  -Dpackaging=jar \
+  -DgeneratePom=true \
+  -DlocalRepositoryPath=. \
+  -Dfile="${CLDR_TOOLS_DIR}/libs/utilities.jar"
+
+popd > /dev/null
+
+# We are back in the root directory now.
+echo "Syncing local Maven repository..."
+run_with_logging mvn -B dependency:purge-local-repository -DsnapshotsOnly=true
+
+mv -f "${LOG_FILE}" "last_log.txt"
+echo "All done! (log file: last_log.txt)"
+trap - EXIT