<!--
* © 2016 and later: Unicode, Inc. and others.
* License & terms of use: http://www.unicode.org/copyright.html#License
*******************************************************************************
* Copyright (C) 1997-2016, International Business Machines Corporation and    *
* others. All Rights Reserved.                                                *
*******************************************************************************
-->
<project name="icu4j" default="jar" basedir="."
    xmlns:ivy="antlib:org.apache.ivy.ant"
    xmlns:jacoco="antlib:org.jacoco.ant">

    <property file="build-local.properties"/>
    <property file="build.properties"/>

    <property name="shared.dir" value="main/shared"/>
    <import file="${shared.dir}/build/common-targets.xml"/>

    <property environment="env"/>

    <!-- icu4j binaries -->
    <property name="icu4j.jar.file" value="icu4j.jar"/>
    <property name="icu4jtests.jar.file" value="icu4jtests.jar"/>
    <property name="icu4j-charset.jar.file" value="icu4j-charset.jar"/>
    <property name="icu4j-localespi.jar.file" value="icu4j-localespi.jar"/>

    <property name="icu4jdemos.jar.file" value="icu4jdemos.jar"/>

    <!-- icu4j API doc jar file -->
    <property name="icu4jdocs.jar.file" value="icu4j-docs.jar"/>

    <!-- icu4j src jar files -->
    <property name="icu4j-src.jar.file" value="icu4j-src.jar"/>
    <property name="icu4j-charset-src.jar.file" value="icu4j-charset-src.jar"/>
    <property name="icu4j-localespi-src.jar.file" value="icu4j-localespi-src.jar"/>

    <!-- icu4j source package archive files -->
    <property name="icu4jsrc.zip.file" value="icu4j.zip"/>
    <property name="icu4jsrc.tgz.file" value="icu4j.tgz"/>

    <!-- icu4j versioned release files -->
    <property name="icu4j.jar.versioned.file" value="icu4j-${release.file.ver}.jar"/>
    <property name="icu4j-charset.jar.versioned.file" value="icu4j-charset-${release.file.ver}.jar"/>
    <property name="icu4j-localespi.jar.versioned.file" value="icu4j-localespi-${release.file.ver}.jar"/>

    <property name="icu4j-src.jar.versioned.file" value="icu4j-${release.file.ver}-src.jar"/>
    <property name="icu4j-charset-src.jar.versioned.file" value="icu4j-charset-${release.file.ver}-src.jar"/>
    <property name="icu4j-localespi-src.jar.versioned.file" value="icu4j-localespi-${release.file.ver}-src.jar"/>

    <property name="icu4jdocs.jar.versioned.file" value="icu4j-${release.file.ver}-docs.jar"/>

    <!-- <property name="icu4jsrc.zip.versioned.file" value="icu4j-${release.file.ver}.zip"/> -->
    <property name="icu4jsrc.tgz.versioned.file" value="icu4j-${release.file.ver}.tgz"/>

    <!-- API doc -->
    <property name="icu4j.api.doc.title" value="ICU4J ${api.doc.version} API Specification"/>
    <property name="icu4j.api.doc.window.title" value="ICU4J ${api.doc.version}"/>
    <property name="icu4j.api.doc.header" value="ICU4J ${api.doc.version}"/>

    <property name="icu4j.api.doc.jdk.link" value="https://docs.oracle.com/javase/8/docs/api/"/>
    <property name="icu4j.api.doc.copyright.footer" value="&lt;font size=-1&gt;Copyright &#x00A9; 2016 Unicode, Inc. and others.&lt;/font&gt;"/>

    <!-- API docs for maven repo -->
    <property name="icu4jdocs.main.jar.versioned.file" value="icu4j-${release.file.ver}-docs.jar"/>
    <property name="icu4j.main.api.doc.title" value="ICU4J (com.ibm.icu:icu4j) ${api.doc.version} API Specification"/>
    <property name="icu4j.main.api.doc.window.title" value="ICU4J (com.ibm.icu:icu4j) ${api.doc.version}"/>
    <property name="icu4j.main.api.doc.header" value="ICU4J (com.ibm.icu:icu4j) ${api.doc.version}"/>

    <property name="icu4jdocs.charset.jar.versioned.file" value="icu4j-charset-${release.file.ver}-docs.jar"/>
    <property name="icu4j.charset.api.doc.title" value="ICU4J Charset (com.ibm.icu:icu4j-charset) ${api.doc.version} API Specification"/>
    <property name="icu4j.charset.api.doc.window.title" value="ICU4J Charset (com.ibm.icu:icu4j-charset) ${api.doc.version}"/>
    <property name="icu4j.charset.api.doc.header" value="ICU4J Charset (com.ibm.icu:icu4j-charset) ${api.doc.version}"/>

    <property name="icu4jdocs.localespi.jar.versioned.file" value="icu4j-localespi-${release.file.ver}-docs.jar"/>
    <property name="icu4j.locspi.api.doc.title" value="ICU4J Locale SPI Provider (com.ibm.icu:icu4j-localespi) ${api.doc.version} API Specification"/>
    <property name="icu4j.locspi.api.doc.window.title" value="ICU4J Locale SPI Provider (com.ibm.icu:icu4j-localespi) ${api.doc.version}"/>
    <property name="icu4j.locspi.api.doc.header" value="ICU4J Locale SPI Provider (com.ibm.icu:icu4j-localespi) ${api.doc.version}"/>


    <!-- directories -->
    <property name="release.dir" value="release"/>
    <property name="doc.dir" value="doc"/>
    <property name="maven.doc.base.dir" value="${out.dir}/mavendoc"/>
    <property name="cldr.util.out.dir" value="${out.dir}/cldr_util"/>
    <property name="cldr.release.dir" value="release_cldr"/>
    <property name="external-jars" value="lib"/>

    <!-- Java version check -->
    <condition property="is.java7">
        <matches string="${java.version}" pattern="1\.7\.\d.*"/>
    </condition>

    <condition property="is.java8">
        <matches string="${java.version}" pattern="1\.8\.\d.*"/>
    </condition>

    <condition property="is.java9">
        <matches string="${java.version}" pattern="9((-.|\.\d).*)?"/>
    </condition>

    <condition property="is.java10">
        <matches string="${java.version}" pattern="10((-.|\.\d).*)?"/>
    </condition>

    <condition property="is.java11">
        <matches string="${java.version}" pattern="11((-.|\.\d).*)?"/>
    </condition>

    <condition property="is.java12">
        <matches string="${java.version}" pattern="12((-.|\.\d).*)?"/>
    </condition>

    <condition property="is.java8.plus">
        <or>
            <isset property="is.java8"/>
            <isset property="is.java9"/>
            <isset property="is.java10"/>
            <isset property="is.java11"/>
            <isset property="is.java12"/>
        </or>
    </condition>

    <condition property="is.java7.plus">
        <or>
            <isset property="is.java7"/>
            <isset property="is.java8.plus"/>
        </or>
    </condition>

    <fail message="The JDK version is too old or unknown.">
        <condition>
            <not>
                <isset property="is.java7.plus"/>
            </not>
        </condition>
    </fail>


    <!-- Build environment info -->
    <property name="env.COMPUTERNAME" value="${env.HOSTNAME}"/>
    <target name="info" description="Display the build environment information">
        <echo message="----- Build Environment Information -------------------"/>
        <echo message="Java Home:    ${java.home}"/>
        <echo message="Java Version: ${java.version}"/>
        <echo message="Ant Home:     ${ant.home}"/>
        <echo message="Ant Version:  ${ant.version}"/>
        <echo message="OS:           ${os.name}"/>
        <echo message="OS Version:   ${os.version}"/>
        <echo message="OS Arch:      ${os.arch}"/>
        <echo message="Host:         ${env.COMPUTERNAME}"/>
        <echo message="-------------------------------------------------------"/>
    </target>

    <target name="clean" description="Clean up build outputs">
        <ant dir="${icu4j.core.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.collate.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.charset.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.currdata.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.langdata.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.localespi.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.regiondata.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.translit.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.test-framework.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.core-tests.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.collate-tests.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.charset-tests.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.localespi-tests.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.packaging-tests.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.translit-tests.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.build-tools.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.tools.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.demos.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.samples.dir}" target="clean" inheritAll="false"/>
        <ant dir="${icu4j.perf-tests.dir}" target="clean" inheritAll="false"/>

        <!-- delete all .jar files root directory -->
        <delete>
            <fileset dir="." includes="icu4j*.jar"/>
        </delete>

        <delete dir="${release.dir}"/>
        <delete dir="${doc.dir}"/>
        <delete dir="${out.dir}"/>
        <delete dir="${module.dir}"/>
        <delete dir="${cldr.release.dir}"/>

        <available file="eclipse-build" type="dir" property="eclipse-build.dir.present"/>
        <antcall target="_clean.eclipse-build"/>
    </target>

    <target name="_clean.eclipse-build" if="eclipse-build.dir.present">
        <ant dir="eclipse-build" target="clean" inheritAll="false"/>
    </target>

    <target name="ivy-clean">
        <ivy:cleancache/>
    </target>

    <!-- Ivy Targets -->
    <property name="ivy.install.version" value="2.1.0-rc2" />
    <condition property="ivy.home" value="${env.IVY_HOME}">
        <isset property="env.IVY_HOME" />
    </condition>
    <property name="ivy.home" value="${user.home}/.ant" />
    <property name="ivy.jar.dir" value="${ivy.home}/lib" />
    <property name="ivy.jar.file" value="${ivy.jar.dir}/ivy.jar" />

    <target name="download-ivy" unless="offline">
        <mkdir dir="${ivy.jar.dir}"/>
        <!-- download Ivy from web site so that it can be used even without any special installation -->
        <get src="https://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
             dest="${ivy.jar.file}" usetimestamp="true"/>
    </target>

    <target name="init-ivy" depends="download-ivy">
      <!-- try to load ivy here from ivy home, in case the user has not already dropped
              it into ant's lib dir (note that the latter copy will always take precedence).
              We will not fail as long as local lib dir exists (it may be empty) and
              ivy is in at least one of ant's lib dir or the local lib dir. -->
        <path id="ivy.lib.path">
            <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
        </path>
        <taskdef resource="org/apache/ivy/ant/antlib.xml"
                 uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
    </target>

    <target name="test-init-junit-dependency" depends="init-ivy">
        <ivy:retrieve/>
    </target>

    <target name="init" depends="test-init-junit-dependency"
            description="Initialize the environment for build and test. May require internet access."/>

    <target name="_classifytests">
        <condition property="testaction.run">
            <isset property="testclass"/>
       </condition>
       <condition property="testaction.class">
            <and>
                <isset property="testclass"/>
                <not><isset property="testnames"/></not>
            </and>
        </condition>
        <condition property="testaction.tests">
            <and>
                <isset property="testclass"/>
                <isset property="testnames"/>
            </and>
        </condition>
        <condition property="testaction.error">
            <and>
                <not><isset property="testclass"/></not>
                <isset property="testnames"/>
            </and>
        </condition>
        <condition property="testaction.all">
            <and>
                <not><isset property="testclass"/></not>
                <not><isset property="testnames"/></not>
            </and>
        </condition>
    </target>

    <target name="checkTest" depends="_classifytests, tests, runallTests, noTests" if="testaction.run" description="Run only the specified tests of the specified test class or, if no arguments are given, the standard ICU4J test suite.">
        <sequential>
            <delete dir="${junit.out.dir}/checkTest"/>
            <mkdir dir="${junit.out.dir}/checkTest"/>

            <junit printsummary="yes">
                <classpath>
                    <path refid="junit.jars"/>
                    <path refid="junit.icu.jars"/>
                </classpath>
                <test name="${testclass}" todir="${junit.out.dir}/checkTest" outfile="checkTest" methods="${testnames}" if="testaction.tests">
                    <formatter type="xml"/>
                </test>
                <test name="${testclass}" todir="${junit.out.dir}/checkTest" outfile="checkTest" if="testaction.class">
                    <formatter type="xml"/>
                </test>
            </junit>

            <junitreport todir="${junit.out.dir}/checkTest">
                <fileset dir="${junit.out.dir}/checkTest">
                    <include name="checkTest.xml"/>
                </fileset>
                <report format="frames" todir="${junit.out.dir}/checkTest/html"/>
            </junitreport>

            <fail message="test failed: @{testdir}" if="@{failure-status}" />
        </sequential>
    </target>

     <target name="runallTests" if="testaction.all">
        <antcall target="allTests"/>
     </target>

    <target name="allTests" depends="check"/>

    <target name="noTests" if="testaction.error">
        <echo>Execute JUnit testing using -Dtestclass='class-name' -Dtestnames='test-name1>, test-name2, ...'</echo>
    </target>

    <!-- Junit Targets -->
    <macrodef name="icu-junit">
        <attribute name="test-name"/>
        <attribute name="jvm-options" default=""/>
        <attribute name="classpath" default="junit.icu.jars"/>
        <attribute name="failure-status" default="ignore"/>
        <element name="junit-fileset"/>
        <element name="junit-parameters" optional="true"/>
        <sequential>
        <echo message="@{jvm-options}"/>
            <!--set the property - if it was set before it won't override-->
            <property name="user-jvm-options" value=""/>
            <property name="internal-jvm-options" value=""/>
            <delete dir="${junit.out.dir}/@{test-name}"/>
            <mkdir  dir="${junit.out.dir}/@{test-name}"/>

            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no"
                failureproperty="@{failure-status}" tempdir="${junit.out.dir}">
                <jvmarg value="-Xss4m"/>
                <jvmarg value="-ea"/>
                <jvmarg value="-Djava.awt.headless=true"/>
                <jvmarg line="${user-jvm-options}"/>
                <jvmarg line="@{jvm-options}"/>
                <jvmarg line="${internal-jvm-options}"/>
                <junit-parameters/>
                <classpath>
                    <path refid="junit.jars"/>
                    <path refid="@{classpath}"/>
                </classpath>
                <formatter type="plain"/>
                <formatter type="xml"/>

                <batchtest todir="${junit.out.dir}/@{test-name}">
                    <junit-fileset/>
                </batchtest>
            </junit>

            <junitreport tofile="@{test-name}-TestSuite.xml" todir="${junit.out.dir}/@{test-name}">
                <fileset dir="${junit.out.dir}/@{test-name}">
                    <include name="*.xml"/>
                </fileset>
                <report format="frames" todir="${junit.out.dir}/@{test-name}/html"/>
            </junitreport>

            <fail message="test failed: @{test-name}" if="@{failure-status}" />

        </sequential>
    </macrodef>

    <property name="junit.out.dir" value="${out.dir}/junit-results"/>
    <property name="junit.core.jar" value="${external-jars}/junit-4.12.jar"/>
    <property name="junit.hamcrest.jar" value="${external-jars}/hamcrest-core-1.3.jar"/>
    <property name="junit.junitparams.jar" value="${external-jars}/JUnitParams-1.0.5.jar"/>
    <path id="junit.jars">
        <pathelement path="${junit.core.jar}"/>
        <pathelement path="${junit.hamcrest.jar}"/>
        <pathelement path="${junit.junitparams.jar}"/>
    </path>

    <path id="junit.icu.jars">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.collate.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
        <pathelement location="${icu4j.currdata.jar}"/>
        <pathelement location="${icu4j.langdata.jar}"/>
        <pathelement location="${icu4j.regiondata.jar}"/>
        <pathelement location="${icu4j.translit.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
        <pathelement location="${icu4j.tools.jar}"/>
        <pathelement location="${icu4j.core-tests.jar}"/>
        <pathelement location="${icu4j.collate-tests.jar}"/>
        <pathelement location="${icu4j.charset-tests.jar}"/>
        <pathelement location="${icu4j.translit-tests.jar}"/>
        <pathelement location="${icu4j.localespi-tests.jar}"/>
        <pathelement location="${icu4j.packaging-tests.jar}"/>
        <pathelement location="${icu4j.regiondata.jar}"/>
    </path>

    <path id="junit.icu.release.jars">
        <pathelement location="${icu4j.jar.file}"/>
        <pathelement location="${icu4j.charset.jar}"/>
        <pathelement location="${icu4jtests.jar.file}"/>
    </path>

    <path id="junit.icu.localespi-tests.jars">
        <pathelement location="${icu4j.test-framework.jar}"/>
        <pathelement location="${icu4j.localespi-tests.jar}"/>
    </path>

    <!--Class names that will be included/excluded as tests-->
    <patternset id="test-classes-patternset">
        <include name="**/*Test*"/>
        <exclude name="**/*Fmwk*"/>
        <exclude name="**/*TestUtility*"/>
        <exclude name="**/*TestHelper*"/>
        <exclude name="**/*TestCase*"/>
        <exclude name="**/*TestData*"/>
        <exclude name="**/*TestSample*"/>
        <exclude name="**/*$*.class"/>
        <exclude name="**/data/**"/>
        <exclude name="com/ibm/icu/dev/test/*"/>
    </patternset>

    <!--Class names that will be included/excluded as tests for time zone check-->
    <patternset id="timeZoneCheck-patternset">
        <include name="**/TimeZoneFormatTest*"/>
        <exclude name="**/*$*.class"/>
    </patternset>

    <!--Class names that will be included/excluded as tests for packaging check-->
    <patternset id="packagingCheck-patternset">
        <include name="**/TestLocaleNamePackaging*"/>
        <exclude name="**/*$*.class"/>
    </patternset>

    <!--Class names that will be included/excluded as tests for locale SPI check-->
    <patternset id="localespiCheck-patternset">
        <include name="**/*Test*"/>
        <exclude name="com/ibm/icu/dev/test/localespi/TestUtil.*"/>
        <exclude name="**/*$*.class"/>
    </patternset>

    <!-- meta build targets -->
    <target name="all" depends="info, main, tests, build-tools, tools, demos, samples, perf-tests, jar, docs" description="Build all primary targets"/>
    <target name="main" depends="info, core, collate, charset, currdata, langdata, regiondata, translit, localespi" description="Build ICU4J runtime library classes"/>
    <target name="tests" depends="info, core-tests, charset-tests, collate-tests, packaging-tests, translit-tests, localespi-tests" description="Build ICU4J test classes"/>

    <target name="secure" depends="icu4jJar" description="(Deprecated)Build ICU4J API and test classes for running the ICU4J test suite with Java security manager enabled"/>

    <!-- Check to see if JVM_OPTIONS enviroment variable is set. This can be use to set the heap size. -->
    <property name="env.JVM_OPTIONS" value=""/>
    <property name="jvm_options" value="${env.JVM_OPTIONS}"/>

    <target name="_check">
    	<parallel>
	        <antcall target="_charsetCheck"/>
    	    <antcall target="_collateCheck"/>
        	<antcall target="_coreCheck"/>
        	<antcall target="_translitCheck"/>
        </parallel>
    </target>

    <target name="exhaustiveCheck" description="Run the standard ICU4J test suite in exhaustive mode">
        <antcall target="check">
            <param name="internal-jvm-options" value="-DICU.exhaustive=10"/>
        </antcall>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="check" depends="main, tests" description="Run the standard ICU4J test suite">
        <antcall target="_check"/>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="runTest" description="Run the standard ICU4J test suite without calling any other build targets">
        <antcall target="_check"/>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="releaseJarCheck" depends="jar, icu4jtestsJar" description="Run the ICU4J test suite with ICU4J release jar files">
        <icu-junit test-name="releaseJarCheck"
            classpath="junit.icu.release.jars"
            failure-status="icu-junit-failure">
            <junit-fileset>
                <zipfileset src="${icu4jtests.jar.file}">
                    <patternset refid="test-classes-patternset"/>
                </zipfileset>
            </junit-fileset>
        </icu-junit>
        <fail message="test failed - icu4j/icu4j-charset" if="icu-junit-failure" />

        <property name="test.java.ext.dir" value="${out.dir}/localespi-ext"/>
        <delete dir="${test.java.ext.dir}"/>
        <mkdir dir="${test.java.ext.dir}"/>
        <copy file="${icu4j-localespi.jar.file}" todir="${test.java.ext.dir}"/>
        <copy file="${icu4j.jar.file}" todir="${test.java.ext.dir}"/>

        <icu-junit test-name="releaseJarCheck-localespi"
            classpath="junit.icu.localespi-tests.jars"
            jvm-options="-Djava.ext.dirs=${test.java.ext.dir}${path.separator}${java.ext.dirs}"
            failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.localespi-tests.dir}/${bin.dir}">
                    <patternset refid="localespiCheck-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
        <fail message="test failed - icu4j-localespi" if="icu-junit-failure" />
    </target>

    <target name="timeZoneCheck" depends="main, tests" description="Run the complete test for TimeZoneRoundTripAll">
        <icu-junit test-name="timeZoneCheck"
            jvm-options="-DTimeZoneRoundTripAll=true"
            failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.core-tests.dir}/${bin.dir}">
                    <patternset refid="timeZoneCheck-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="jdktzCheck" description="Run the standard ICU4J test suite with JDK TimeZone">
        <antcall target="check">
            <param name="internal-jvm-options" value="-Dcom.ibm.icu.util.TimeZone.DefaultTimeZoneType=JDK"/>
        </antcall>
    </target>

    <path id="junit.icu.jars.PackagingCheckNoLangData">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
        <pathelement location="${icu4j.packaging-tests.jar}"/>
        <pathelement location="${icu4j.regiondata.jar}"/>
    </path>

    <path id="junit.icu.jars.PackagingCheckNoRegionData">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
        <pathelement location="${icu4j.packaging-tests.jar}"/>
        <pathelement location="${icu4j.langdata.jar}"/>
    </path>

    <path id="junit.icu.jars.PackagingCheckNoLangNorRegionData">
        <pathelement location="${icu4j.core.jar}"/>
        <pathelement location="${icu4j.charset.jar}"/>
        <pathelement location="${icu4j.test-framework.jar}"/>
        <pathelement location="${icu4j.packaging-tests.jar}"/>
    </path>

    <target name="_packagingCheckNoLangData">
        <!-- region data but no language data -->
        <icu-junit test-name="packaging-NoLangData"
            classpath="junit.icu.jars.PackagingCheckNoLangData"
            failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.packaging-tests.dir}/${bin.dir}">
                    <patternset refid="packagingCheck-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
    </target>

    <target name="_packagingCheckNoRegionData">
        <!-- language data but no region data -->
        <icu-junit test-name="packaging-NoRegionData"
            classpath="junit.icu.jars.PackagingCheckNoRegionData"
            failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.packaging-tests.dir}/${bin.dir}">
                    <patternset refid="packagingCheck-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
    </target>

    <target name="_packagingCheckNoLangNorRegionData">
        <!-- neither region nor language data -->
        <icu-junit test-name="packaging-NoLangNorRegionData"
            classpath="junit.icu.jars.PackagingCheckNoLangNorRegionData"
            failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.packaging-tests.dir}/${bin.dir}">
                    <patternset refid="packagingCheck-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
    </target>

    <target name="packagingCheck" depends="info, core, langdata, regiondata, packaging-tests" description="Run packaging tests">
        <antcall target="_packagingCheckNoLangData"/>
        <antcall target="_packagingCheckNoRegionData"/>
        <antcall target="_packagingCheckNoLangNorRegionData"/>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="_coreCheck">
        <icu-junit test-name="core" failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.core-tests.dir}/${bin.dir}">
                    <patternset refid="test-classes-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
    </target>

    <target name="coreCheck" depends="info, core, currdata, langdata, regiondata, core-tests" description="Run only the core tests">
        <antcall target="_coreCheck"/>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="_charsetCheck">
        <icu-junit test-name="charset" failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.charset-tests.dir}/${bin.dir}">
                    <patternset refid="test-classes-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
    </target>

    <target name="charsetCheck" depends="info, core, charset, currdata, langdata, regiondata, core-tests, charset-tests" description="Run only the charset tests">
        <antcall target="_charsetCheck"/>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="_collateCheck">
        <icu-junit test-name="collate" failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.collate-tests.dir}/${bin.dir}">
                    <patternset refid="test-classes-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
    </target>

    <target name="collateCheck" depends="info, core, collate, currdata, langdata, regiondata, core-tests, collate-tests" description="Run only the collation tests">
        <antcall target="_collateCheck"/>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="_translitCheck">
        <icu-junit test-name="translit" failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.translit-tests.dir}/${bin.dir}">
                    <patternset refid="test-classes-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
    </target>

    <target name="translitCheck" depends="info, core, translit, translit-tests" description="Run the ICU4J Translit test suite">
        <antcall target="_translitCheck"/>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="_localespiCheck">
        <icu-junit test-name="localespi"
            classpath="junit.icu.localespi-tests.jars"
            jvm-options="-Djava.ext.dirs=${icu4j.core.dir}/${jar.dir}${path.separator}${icu4j.localespi.dir}/${jar.dir}${path.separator}${icu4j.collate.dir}/${jar.dir}${path.separator}${icu4j.currdata.dir}/${jar.dir}${path.separator}${icu4j.langdata.dir}/${jar.dir}${path.separator}${icu4j.regiondata.dir}/${jar.dir}${path.separator}${java.ext.dirs}"
            failure-status="icu-junit-failure">
            <junit-fileset>
                <fileset dir="${icu4j.localespi-tests.dir}/${bin.dir}">
                    <patternset refid="localespiCheck-patternset"/>
                </fileset>
            </junit-fileset>
        </icu-junit>
    </target>

    <target name="localespiCheck" depends="info, localespi, localespi-tests" description="Run the ICU4J Locale SPI test suite">
        <antcall target="_localespiCheck"/>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <target name="secureCheck" depends="jar, icu4jtestsJar" description="Run the ICU4J test suite with Java security manager enabled">
        <icu-junit test-name="secureCheck"
            classpath="junit.icu.release.jars"
            jvm-options="-Djava.security.manager -Djava.security.policy=${user.dir}/${shared.dir}/data/security.policy"
            failure-status="icu-junit-failure">
            <junit-fileset>
                <zipfileset src="${icu4jtests.jar.file}">
                    <patternset refid="test-classes-patternset"/>
                </zipfileset>
            </junit-fileset>
        </icu-junit>
        <fail message="test failed" if="icu-junit-failure" />
    </target>

    <!-- jar targets -->
    <target name="jar" depends="icu4jJar, charset, localespi" description="Build ICU4J runtime library jar files">
        <copy file="${icu4j.charset.jar}" tofile="${icu4j-charset.jar.file}"/>
        <copy file="${icu4j.localespi.jar}" tofile="${icu4j-localespi.jar.file}" failonerror="false"/>
    </target>

    <target name="icu4jJar" depends="info, core, collate, currdata, langdata, regiondata, translit" description="Build ICU4J all-in-one core jar">
        <mkdir dir="${out.dir}"/>

        <!-- manifest -->
        <copy file="manifest.stub" todir="${out.dir}">
            <filterset>
                <filter token="SPECVERSION" value="${jar.spec.version}"/>
                <filter token="IMPLVERSION" value="${jar.impl.version}"/>
                <filter token="COPYRIGHT" value="${jar.copyright.info}"/>
                <filter token="EXECENV" value="${jar.exec.env}"/>
            </filterset>
        </copy>

        <!-- jar -->
        <jar jarfile="${icu4j.jar.file}"
                compress="true"
                manifest="${out.dir}/manifest.stub">
            <fileset dir="${icu4j.core.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.collate.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.currdata.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.langdata.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.regiondata.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.translit.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${shared.dir}/licenses">
                <include name="LICENSE"/>
            </fileset>
        </jar>
    </target>

    <target name="icu4jSrcJar" description="Build icu4j-src.jar">
        <jar jarfile="${icu4j-src.jar.file}"
                compress="true">
            <fileset dir="${icu4j.core.dir}/${src.dir}" includes="**/*.java"/>
            <fileset dir="${icu4j.collate.dir}/${src.dir}" includes="**/*.java"/>
            <fileset dir="${icu4j.currdata.dir}/${src.dir}" includes="**/*.java"/>
            <fileset dir="${icu4j.langdata.dir}/${src.dir}" includes="**/*.java"/>
            <fileset dir="${icu4j.regiondata.dir}/${src.dir}" includes="**/*.java"/>
            <fileset dir="${icu4j.translit.dir}/${src.dir}" includes="**/*.java"/>
            <fileset dir="${shared.dir}/licenses">
                <include name="LICENSE"/>
            </fileset>
        </jar>
    </target>

    <target name="icu4jtestsJar" depends="info, tests, tools" description="Build ICU4J all-in-one test jar">
        <jar jarfile="${icu4jtests.jar.file}"
                compress="true">
            <fileset dir="${icu4j.test-framework.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.core-tests.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.collate-tests.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.translit-tests.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.charset-tests.dir}/${bin.dir}" includes="**/*"/>
            <fileset dir="${icu4j.tools.dir}/${bin.dir}" includes="com/ibm/icu/dev/tool/locale/**"/>
        </jar>
    </target>

    <target name="jarDemos" depends="icu4jJar, demos" description="Build ICU4J demo jar file">
        <copy file="${icu4j.demos.jar}" tofile="${icu4jdemos.jar.file}"/>
    </target>


    <!-- release targets -->
    <target name="_check_config_for_release" depends="_checkJCite">
        <condition property="release.build.config.ok">
            <and>
                <isset property="is.java8"/>
                <isset property="java7.bootclasspath"/>
                <isset property="jcite.libs"/>
            </and>
        </condition>
    </target>

    <target name="_verify_config_for_release" depends="_check_config_for_release" unless="release.build.config.ok">
        <condition property="disp.is.java8" value="${java.version}" else="${java.version} - Must be 1.8!">
            <isset property="is.java8"/>
        </condition>
        <condition property="disp.java7.bootclasspath" value="${java7.bootclasspath}" else="Not Defined!">
            <isset property="java7.bootclasspath"/>
        </condition>
        <condition property="disp.jcite.libs" value="${jcite.libs}" else="Not Defined!">
            <isset property="jcite.libs"/>
        </condition>

        <echo message="################################################################"/>
        <echo message="[WARNING] Insufficient Build Configuration for ICU4J Release"/>
        <echo message="JDK 8 Tools:                    ${disp.is.java8}"/>
        <echo message="JRE 7 System Library Path:      ${disp.java7.bootclasspath}"/>
        <echo message="JCite Library Path:             ${disp.jcite.libs}"/>
        <echo message="################################################################"/>
    </target>

    <target name="_final_release_check" depends="_verify_config_for_release">
        <fail message="Insufficient Build Configuration for ICU4J Release" unless="release.build.config.ok"/>

        <fail message="Maven Ant Tasks are required to publish libraries. Set maven-ant-tasks.jar property. Maven Ant Tasks URL: http://maven.apache.org/ant-tasks/" unless="maven-ant-tasks.jar"/>
        <condition property="no_maven-ant-tasks">
            <available file="${maven-ant-tasks.jar}"/>
        </condition>
        <fail message="Maven Ant Tasks not found at ${maven-ant-tasks.jar}" unless="no_maven-ant-tasks"/>
    </target>

    <!--
        The ant target releaseFinal is used for ICU official release.
        This target builds ICU4J library jars, source jars and API document jars.
        Also, this target publishes ICU4J artifacts to OSSRH staging repository.

        Prerequisites

        1) Apache Maven Ant tasks - http://maven.apache.org/ant-tasks

        Note: Apache Maven Ant tasks was already deprecated. You can still
        download the latest version from Maven Central
        http://central.maven.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven-ant-tasks-2.1.3.jar

        TODO: Because mavne-ant-tasks was already deprecated and no longer maintained,
        we should look for alternative solution.

        2) GnuPG

        3) Put build-local.properties to specify followings

            maven-ant-tasks.jar = [location of maven ant tasks jar file]
            gpg.user = ICU Project

        4) Maven configuration file ~/.m2/settings.xml
            <settings>
                <servers>
                    <server>
                        <id>icu4j-releases</id>
                        <username>[oss.sonatype.org Nexus account ID]</username>
                        <password>[oss.sonatype.org Nexus account password]</password>
                    </server>
                    <server>
                        <id>icu4j-snapshots</id>
                        <username>[oss.sonatype.org Nexus account ID]</username>
                        <password>[oss.sonatype.org Nexus account password]</password>
                    </server>
                </servers>
            </settings>
    -->
    <target name="releaseFinal" depends="info, _final_release_check, releaseVer, docsMaven"
        description="Build all ICU4J release files for distribution and upload them to the OSSRH staging repository">

        <property name="maven.pom.dir" value="maven"/>
        <property name="maven.icu4j.release.dir" value="${release.dir}/maven/icu4j"/>
        <property name="maven.charset.release.dir" value="${release.dir}/maven/icu4j-charset"/>
        <property name="maven.localespi.release.dir" value="${release.dir}/maven/icu4j-localespi"/>

        <property name="maven.icu4j.jar.file" value="icu4j-${maven.pom.ver}.jar"/>
        <property name="maven.icu4j.src.jar.file" value="icu4j-${maven.pom.ver}-sources.jar"/>
        <property name="maven.icu4j.doc.jar.file" value="icu4j-${maven.pom.ver}-javadoc.jar"/>

        <property name="maven.charset.jar.file" value="icu4j-charset-${maven.pom.ver}.jar"/>
        <property name="maven.charset.src.jar.file" value="icu4j-charset-${maven.pom.ver}-sources.jar"/>
        <property name="maven.charset.doc.jar.file" value="icu4j-charset-${maven.pom.ver}-javadoc.jar"/>

        <property name="maven.localespi.jar.file" value="icu4j-localespi-${maven.pom.ver}.jar"/>
        <property name="maven.localespi.src.jar.file" value="icu4j-localespi-${maven.pom.ver}-sources.jar"/>
        <property name="maven.localespi.doc.jar.file" value="icu4j-localespi-${maven.pom.ver}-javadoc.jar"/>


        <delete dir="${release.dir}/maven"/>
        <mkdir dir="${maven.icu4j.release.dir}"/>
        <mkdir dir="${maven.charset.release.dir}"/>
        <mkdir dir="${maven.localespi.release.dir}"/>


        <!-- copy pom.xml with version -->
        <copy file="${maven.pom.dir}/icu4j/pom.xml" todir="${maven.icu4j.release.dir}">
            <filterset>
                <filter token="POMVERSION" value="${maven.pom.ver}"/>
            </filterset>
        </copy>
        <copy file="${maven.pom.dir}/icu4j-charset/pom.xml" todir="${maven.charset.release.dir}">
            <filterset>
                <filter token="POMVERSION" value="${maven.pom.ver}"/>
            </filterset>
        </copy>
        <copy file="${maven.pom.dir}/icu4j-localespi/pom.xml" todir="${maven.localespi.release.dir}">
            <filterset>
                <filter token="POMVERSION" value="${maven.pom.ver}"/>
            </filterset>
        </copy>

        <!-- copy ICU release binaries and source archive to the maven release directory -->
        <copy file="${release.dir}/${icu4j.jar.versioned.file}"
            tofile="${maven.icu4j.release.dir}/${maven.icu4j.jar.file}"/>
        <copy file="${release.dir}/${icu4j-charset.jar.versioned.file}"
            tofile="${maven.charset.release.dir}/${maven.charset.jar.file}"/>
        <copy file="${release.dir}/${icu4j-localespi.jar.versioned.file}"
            tofile="${maven.localespi.release.dir}/${maven.localespi.jar.file}"/>

        <copy file="${release.dir}/${icu4j-src.jar.versioned.file}"
            tofile="${maven.icu4j.release.dir}/${maven.icu4j.src.jar.file}"/>
        <copy file="${release.dir}/${icu4j-charset-src.jar.versioned.file}"
            tofile="${maven.charset.release.dir}/${maven.charset.src.jar.file}"/>
        <copy file="${release.dir}/${icu4j-localespi-src.jar.versioned.file}"
            tofile="${maven.localespi.release.dir}/${maven.localespi.src.jar.file}"/>

        <!-- javadoc jar for maven release -->
        <jar jarfile="${maven.icu4j.release.dir}/${maven.icu4j.doc.jar.file}"
            compress="true"
            basedir="${maven.doc.base.dir}/icu4j"/>
        <jar jarfile="${maven.charset.release.dir}/${maven.charset.doc.jar.file}"
            compress="true"
            basedir="${maven.doc.base.dir}/charset"/>
        <jar jarfile="${maven.localespi.release.dir}/${maven.localespi.doc.jar.file}"
            compress="true"
            basedir="${maven.doc.base.dir}/localespi"/>

        <!-- sign release files-->
        <macrodef name="gpg">
            <attribute name="file"/>
            <sequential>
                <delete file="@{file}.asc" failonerror="false"/>
                <exec executable="gpg">
                    <arg value="-u"/>
                    <arg value="${gpg.user}"/>
                    <arg value="-ab"/>
                    <arg value="-o"/>
                    <arg value="@{file}.asc"/>
                    <arg value="@{file}"/>
                </exec>
            </sequential>
        </macrodef>

        <gpg file="${maven.icu4j.release.dir}/pom.xml"/>
        <gpg file="${maven.icu4j.release.dir}/${maven.icu4j.jar.file}"/>
        <gpg file="${maven.icu4j.release.dir}/${maven.icu4j.src.jar.file}"/>
        <gpg file="${maven.icu4j.release.dir}/${maven.icu4j.doc.jar.file}"/>

        <gpg file="${maven.charset.release.dir}/pom.xml"/>
        <gpg file="${maven.charset.release.dir}/${maven.charset.jar.file}"/>
        <gpg file="${maven.charset.release.dir}/${maven.charset.src.jar.file}"/>
        <gpg file="${maven.charset.release.dir}/${maven.charset.doc.jar.file}"/>

        <gpg file="${maven.localespi.release.dir}/pom.xml"/>
        <gpg file="${maven.localespi.release.dir}/${maven.localespi.jar.file}"/>
        <gpg file="${maven.localespi.release.dir}/${maven.localespi.src.jar.file}"/>
        <gpg file="${maven.localespi.release.dir}/${maven.localespi.doc.jar.file}"/>

        <!-- deploy ICU4J artifacts to the OSSRH staging repository -->
        <path id="maven-ant-tasks.classpath" path="${maven-ant-tasks.jar}"/>
        <typedef resource="org/apache/maven/artifact/ant/antlib.xml" uri="urn:maven-artifact-ant"
            classpathref="maven-ant-tasks.classpath"/>

        <deploy xmlns="urn:maven-artifact-ant" file="${maven.icu4j.release.dir}/${maven.icu4j.jar.file}">
            <pom file="${maven.icu4j.release.dir}/pom.xml"/>
            <attach file="${maven.icu4j.release.dir}/pom.xml.asc" type="pom.asc"/>
            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.jar.file}.asc" type="jar.asc"/>
            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.src.jar.file}" classifier="sources"/>
            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.src.jar.file}.asc" classifier="sources" type="jar.asc"/>
            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.doc.jar.file}" classifier="javadoc"/>
            <attach file="${maven.icu4j.release.dir}/${maven.icu4j.doc.jar.file}.asc" classifier="javadoc" type="jar.asc"/>
        </deploy>

        <deploy xmlns="urn:maven-artifact-ant" file="${maven.charset.release.dir}/${maven.charset.jar.file}">
            <pom file="${maven.charset.release.dir}/pom.xml"/>
            <attach file="${maven.charset.release.dir}/pom.xml.asc" type="pom.asc"/>
            <attach file="${maven.charset.release.dir}/${maven.charset.jar.file}.asc" type="jar.asc"/>
            <attach file="${maven.charset.release.dir}/${maven.charset.src.jar.file}" classifier="sources"/>
            <attach file="${maven.charset.release.dir}/${maven.charset.src.jar.file}.asc" classifier="sources" type="jar.asc"/>
            <attach file="${maven.charset.release.dir}/${maven.charset.doc.jar.file}" classifier="javadoc"/>
            <attach file="${maven.charset.release.dir}/${maven.charset.doc.jar.file}.asc" classifier="javadoc" type="jar.asc"/>
        </deploy>

        <deploy xmlns="urn:maven-artifact-ant" file="${maven.localespi.release.dir}/${maven.localespi.jar.file}">
            <pom file="${maven.localespi.release.dir}/pom.xml"/>
            <attach file="${maven.localespi.release.dir}/pom.xml.asc" type="pom.asc"/>
            <attach file="${maven.localespi.release.dir}/${maven.localespi.jar.file}.asc" type="jar.asc"/>
            <attach file="${maven.localespi.release.dir}/${maven.localespi.src.jar.file}" classifier="sources"/>
            <attach file="${maven.localespi.release.dir}/${maven.localespi.src.jar.file}.asc" classifier="sources" type="jar.asc"/>
            <attach file="${maven.localespi.release.dir}/${maven.localespi.doc.jar.file}" classifier="javadoc"/>
            <attach file="${maven.localespi.release.dir}/${maven.localespi.doc.jar.file}.asc" classifier="javadoc" type="jar.asc"/>
        </deploy>
    </target>

    <target name="releaseVer" depends="info, releaseBinaries, releaseJarCheck, releaseSrcJars, releaseDocs, releaseSourceArchiveTgz"
            description="Build all ICU4J release files for distribution with versioned file names">
        <!-- binaries -->
        <move file="${release.dir}/${icu4j.jar.file}" tofile="${release.dir}/${icu4j.jar.versioned.file}"/>
        <move file="${release.dir}/${icu4j-charset.jar.file}" tofile="${release.dir}/${icu4j-charset.jar.versioned.file}"/>
        <move file="${release.dir}/${icu4j-localespi.jar.file}" tofile="${release.dir}/${icu4j-localespi.jar.versioned.file}"/>

        <!-- source jars -->
        <move file="${release.dir}/${icu4j-src.jar.file}" tofile="${release.dir}/${icu4j-src.jar.versioned.file}"/>
        <move file="${release.dir}/${icu4j-charset-src.jar.file}" tofile="${release.dir}/${icu4j-charset-src.jar.versioned.file}"/>
        <move file="${release.dir}/${icu4j-localespi-src.jar.file}" tofile="${release.dir}/${icu4j-localespi-src.jar.versioned.file}"/>

        <!-- docs -->
        <move file="${release.dir}/${icu4jdocs.jar.file}" tofile="${release.dir}/${icu4jdocs.jar.versioned.file}"/>

        <!-- package archive -->
        <move file="${release.dir}/${icu4jsrc.tgz.file}" tofile="${release.dir}/${icu4jsrc.tgz.versioned.file}"/>

        <!-- md5 checksum file -->
        <mkdir dir="${out.dir}/checksum"/>
        <delete dir="${out.dir}/checksum" includes="**/*"/>

        <checksum todir="${out.dir}/checksum" format="MD5SUM">
            <fileset dir="${release.dir}">
                <include name="*.jar"/>
                <include name="*.tgz"/>
            </fileset>
        </checksum>

        <concat destfile="${release.dir}/icu4j-${release.file.ver}.md5">
            <fileset dir="${out.dir}/checksum" includes="*"/>
            <filterchain>
                <fixcrlf eol="lf"/>
            </filterchain>
        </concat>

        <antcall target="_verify_config_for_release"/>
    </target>

    <target name="release" depends="info, releaseBinaries, releaseSrcJars, releaseDocs, releaseSourceArchiveTgz" description="Build all ICU4J release files for distribution">
        <mkdir dir="${out.dir}/checksum"/>
        <delete dir="${out.dir}/checksum" includes="**/*"/>

        <checksum todir="${out.dir}/checksum" format="MD5SUM">
            <fileset dir="${release.dir}">
                <include name="*.jar"/>
                <include name="*.tgz"/>
            </fileset>
        </checksum>

        <concat destfile="${release.dir}/icu4j.md5">
            <fileset dir="${out.dir}/checksum" includes="*"/>
            <filterchain>
                <fixcrlf eol="lf"/>
            </filterchain>
        </concat>

        <antcall target="_verify_config_for_release"/>
    </target>

    <target name="releaseBinaries" depends="icu4jJar, charset, localespi" description="Build ICU4J binary files for distribution">
        <mkdir dir="${release.dir}"/>
        <copy file="${icu4j.jar.file}" tofile="${release.dir}/${icu4j.jar.file}"/>
        <copy file="${icu4j.charset.jar}" tofile="${release.dir}/${icu4j-charset.jar.file}"/>
        <copy file="${icu4j.localespi.jar}" tofile="${release.dir}/${icu4j-localespi.jar.file}"/>
    </target>

    <target name="releaseSrcJars" depends="icu4jSrcJar" description="Build ICU4J src jar files for distribution">
        <mkdir dir="${release.dir}"/>

        <!-- icu4j src-jar -->
        <copy file="${icu4j-src.jar.file}" tofile="${release.dir}/${icu4j-src.jar.file}"/>

        <!-- charset/localespi src-jar -->
        <ant dir="${icu4j.charset.dir}" target="src-jar" inheritAll="false"/>
        <ant dir="${icu4j.localespi.dir}" target="src-jar" inheritAll="false"/>

        <copy file="${icu4j.charset.dir}/${out.dir}/lib/${icu4j-charset-src.jar.file}" tofile="${release.dir}/${icu4j-charset-src.jar.file}"/>
        <copy file="${icu4j.localespi.dir}/${out.dir}/lib/${icu4j-localespi-src.jar.file}" tofile="${release.dir}/${icu4j-localespi-src.jar.file}"/>
    </target>


    <target name="releaseDocs" depends="docs" description="Build ICU4J API reference doc jar file for distribution">
        <mkdir dir="${release.dir}"/>
        <jar jarfile="${release.dir}/${icu4jdocs.jar.file}" compress="true" basedir="${doc.dir}"/>
    </target>

    <property name="src.release.wrk.dir" value="${out.dir}/tmpsrc"/>

    <target name="releaseSourceArchiveZip" description="Build ICU4J source release archive (.zip)">
        <delete dir="${src.release.wrk.dir}"/>
        <delete file="${icu4jsrc.zip.file}"/>

        <mkdir dir="${src.release.wrk.dir}"/>

        <fixcrlf srcdir="."
                destdir="${src.release.wrk.dir}"
                encoding="UTF-8"
                eol="crlf">
            <include name="demos/**/*"/>
            <include name="main/**/*"/>
            <include name="perf-tests/**/*"/>
            <include name="samples/**/*"/>
            <include name="tools/**/*"/>
            <include name="*.html"/>
            <include name="*.xml"/>
            <include name="*.properties"/>
            <include name="*.css"/>
            <include name="*.stub"/>
            <exclude name="**/out/**/*"/>
            <exclude name="**/*.jar"/>
            <exclude name="**/build-local.properties"/>
            <exclude name="main/tests/core/src/com/ibm/icu/dev/test/serializable/data/**/*.dat"/>
            <exclude name="main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.*.tri2"/>
            <exclude name="tools/build/icu4j*.api*.gz"/>
        </fixcrlf>

        <mkdir dir="${release.dir}"/>
        <zip destfile="${release.dir}/${icu4jsrc.zip.file}">
            <fileset dir="${src.release.wrk.dir}" includes="**/*"/>
            <fileset dir="${basedir}">
                <include name="main/shared/data/*.jar"/>
                <include name="main/tests/core/src/com/ibm/icu/dev/test/serializable/data/**/*.dat"/>
                <include name="main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.*.tri2"/>
                <include name="tools/build/icu4j*.api*.gz"/>
            </fileset>
        </zip>

        <delete dir="${src.release.wrk.dir}"/>
    </target>

    <target name="releaseSourceArchiveTgz" description="Build ICU4J source release archive (.tgz)">
        <delete dir="${src.release.wrk.dir}"/>
        <delete file="${icu4jsrc.tgz.file}"/>

        <mkdir dir="${src.release.wrk.dir}"/>

        <fixcrlf srcdir="."
                destdir="${src.release.wrk.dir}"
                encoding="UTF-8"
                eol="lf">
            <include name="demos/**/*"/>
            <include name="main/**/*"/>
            <include name="maven/**/*"/>
            <include name="perf-tests/**/*"/>
            <include name="samples/**/*"/>
            <include name="tools/**/*"/>
            <include name="*.html"/>
            <include name="*.xml"/>
            <include name="*.properties"/>
            <include name="*.css"/>
            <include name="*.stub"/>
            <exclude name="**/out/**/*"/>
            <exclude name="**/*.jar"/>
            <exclude name="**/build-local.properties"/>
            <exclude name="main/tests/core/src/com/ibm/icu/dev/test/serializable/data/**/*.dat"/>
            <exclude name="main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.*.tri2"/>
            <exclude name="tools/build/icu4j*.api*.gz"/>
        </fixcrlf>

        <property name="icu4jsrc.tar" value="${out.dir}/icu4jsrc.tar"/>

        <tar destfile="${icu4jsrc.tar}" longfile="gnu">
            <fileset dir="${src.release.wrk.dir}" includes="**/*"/>
            <fileset dir="${basedir}">
                <include name="main/shared/data/*.jar"/>
                <include name="main/tests/core/src/com/ibm/icu/dev/test/serializable/data/**/*.dat"/>
                <include name="main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.*.tri2"/>
                <include name="tools/build/icu4j*.api*.gz"/>
            </fileset>
        </tar>

        <mkdir dir="${release.dir}"/>
        <gzip destfile="${release.dir}/${icu4jsrc.tgz.file}" src="${icu4jsrc.tar}"/>

        <delete dir="${src.release.wrk.dir}"/>
        <delete file="${icu4jsrc.tar}"/>
    </target>

    <!-- findbugs targets -->

    <target name="findbugs" description="Run FindBugs on all library sub projects.">
        <property name="findbugs.out.dir" value="${out.dir}/findbugs"/>
        <mkdir dir="${findbugs.out.dir}"/>

        <ant dir="${icu4j.core.dir}" inheritAll="false" target="findbugs"/>
        <copy file="${icu4j.core.dir}/${out.dir}/fb-core.html" todir="${findbugs.out.dir}"/>

        <ant dir="${icu4j.collate.dir}" inheritAll="false" target="findbugs"/>
        <copy file="${icu4j.collate.dir}/${out.dir}/fb-collate.html" todir="${findbugs.out.dir}"/>

        <ant dir="${icu4j.currdata.dir}" inheritAll="false" target="findbugs"/>
        <copy file="${icu4j.currdata.dir}/${out.dir}/fb-currdata.html" todir="${findbugs.out.dir}"/>

        <ant dir="${icu4j.langdata.dir}" inheritAll="false" target="findbugs"/>
        <copy file="${icu4j.langdata.dir}/${out.dir}/fb-langdata.html" todir="${findbugs.out.dir}"/>

        <ant dir="${icu4j.regiondata.dir}" inheritAll="false" target="findbugs"/>
        <copy file="${icu4j.regiondata.dir}/${out.dir}/fb-regiondata.html" todir="${findbugs.out.dir}"/>

        <ant dir="${icu4j.translit.dir}" inheritAll="false" target="findbugs"/>
        <copy file="${icu4j.translit.dir}/${out.dir}/fb-translit.html" todir="${findbugs.out.dir}"/>


        <ant dir="${icu4j.charset.dir}" inheritAll="false" target="findbugs"/>
        <copy file="${icu4j.charset.dir}/${out.dir}/fb-charset.html" todir="${findbugs.out.dir}"/>

        <ant dir="${icu4j.localespi.dir}" inheritAll="false" target="findbugs"/>
        <copy file="${icu4j.localespi.dir}/${out.dir}/fb-localespi.html" todir="${findbugs.out.dir}"/>
    </target>

    <!-- compile targets -->
    <target name="core" description="Build core classes">
        <ant dir="${icu4j.core.dir}" inheritAll="false"/>
    </target>

    <target name="collate" depends="core" description="Build collation classes">
        <ant dir="${icu4j.collate.dir}" inheritAll="false"/>
    </target>

    <target name="charset" depends="core" description="Build charset classes">
        <ant dir="${icu4j.charset.dir}" inheritAll="false"/>
    </target>

    <target name="currdata" depends="core" description="Build currency data classes">
        <ant dir="${icu4j.currdata.dir}" inheritAll="false"/>
    </target>

    <target name="langdata" depends="core" description="Build language data classes">
        <ant dir="${icu4j.langdata.dir}" inheritAll="false"/>
    </target>

    <target name="localespi" depends="core, collate, currdata, langdata, regiondata" description="Build Locale SPI classes">
        <ant dir="${icu4j.localespi.dir}" inheritAll="false"/>
    </target>

    <target name="regiondata" depends="core" description="Build region data classes">
        <ant dir="${icu4j.regiondata.dir}" inheritAll="false"/>
    </target>

    <target name="translit" depends="core" description="Build translit classes">
        <ant dir="${icu4j.translit.dir}" inheritAll="false"/>
    </target>

    <target name="test-framework" depends="core, init" description="Build test framework classes">
        <ant dir="${icu4j.test-framework.dir}" inheritAll="false">
            <reference refid="junit.jars"/>
        </ant>
    </target>

    <target name="core-tests" depends="core, test-framework, tools" description="Build core tests">
        <ant dir="${icu4j.core-tests.dir}" inheritAll="false">
            <reference refid="junit.jars"/>
        </ant>
    </target>

    <target name="collate-tests" depends="collate, test-framework" description="Build core tests">
        <ant dir="${icu4j.collate-tests.dir}" inheritAll="false">
            <reference refid="junit.jars"/>
        </ant>
    </target>

    <target name="charset-tests" depends="charset, test-framework" description="Build charset tests">
        <ant dir="${icu4j.charset-tests.dir}" inheritAll="false">
            <reference refid="junit.jars"/>
        </ant>
    </target>

    <target name="localespi-tests" depends="localespi, test-framework" description="Build Locale SPI tests">
        <ant dir="${icu4j.localespi-tests.dir}" inheritAll="false">
            <reference refid="junit.jars"/>
        </ant>
    </target>

    <target name="packaging-tests" depends="test-framework" description="Build packaging tests">
        <ant dir="${icu4j.packaging-tests.dir}" inheritAll="false">
            <reference refid="junit.jars"/>
        </ant>
    </target>

    <target name="translit-tests" depends="translit, test-framework" description="Build translit tests">
        <ant dir="${icu4j.translit-tests.dir}" inheritAll="false">
            <reference refid="junit.jars"/>
        </ant>
    </target>

    <target name="demos" depends="core, charset, translit" description="Build demo classes">
        <ant dir="${icu4j.demos.dir}" inheritAll="false"/>
    </target>

    <target name="samples" depends="core, charset, collate, translit" description="Build sample classes">
        <ant dir="${icu4j.samples.dir}" inheritAll="false"/>
    </target>

    <target name="build-tools" description="Build build-tool classes">
        <ant dir="${icu4j.build-tools.dir}" inheritAll="false"/>
    </target>

    <target name="tools" depends="core, collate, translit" description="Build tool classes">
        <ant dir="${icu4j.tools.dir}" inheritAll="false"/>
    </target>

    <target name="perf-tests" depends="core, charset, collate, tools" description="Build performance test classes">
        <ant dir="${icu4j.perf-tests.dir}" inheritAll="false"/>
    </target>

    <!-- doc targets -->
    <target name="docs" depends="info, build-tools, _checkJCite, _docsWithJCite, _docsWithoutJCite" description="Build API documents"/>

    <target name="docsStrict" description="Build API documents with all doclint check enabled">
        <condition property="doclint.option" value="-Xdoclint:all">
            <isset property="is.java8.plus"/>
        </condition>
        <antcall target="docs"/>
    </target>

    <target name="_checkJCite" if="env.JCITE_DIR">
        <fileset dir="${env.JCITE_DIR}" id="jcite.files">
            <include name="build/*.jar"/>
            <include name="lib/*.jar"/>
        </fileset>
        <pathconvert property="jcite.libs" refid="jcite.files"/>

        <dirset dir="${basedir}" id="jcite.src.dirs">
            <include name="samples/src"/>
            <include name="demos/src"/>
            <include name="main/tests/*/src"/>
        </dirset>
        <pathconvert property="jcite.addl.src" refid="jcite.src.dirs"/>
    </target>

    <target name="_docsStyleSheet">
        <condition property="docs.style.sheet" value="stylesheet7.css">
            <isset property="is.java7"/>
        </condition>
        <!-- all other cases -->
        <property name="docs.style.sheet" value="stylesheet8.css"/>
    </target>

    <target name="_docsLintOption" unless="doclint.options">
        <!-- syntax check is disabled because JCite tag name "@.jcite" is invalidated -->
        <condition property="doclint.option" value="-Xdoclint:reference,html" else="">
            <isset property="is.java8.plus"/>
        </condition>
    </target>

    <target name="_docsWithJCite" depends="_docsStyleSheet, _docsLintOption" if="jcite.libs">
        <echo message="Javadoc lint option:            ${doclint.option}"/>
        <echo message="JCite library path:             ${jcite.libs}"/>
        <echo message="JCite additional source path:   ${jcite.addl.src}"/>
        <echo message="Custom stylesheet:              ${docs.style.sheet}"/>
        <javadoc
                destdir="${doc.dir}"
                nodeprecatedlist="true"
                windowtitle="${icu4j.api.doc.window.title}"
                doctitle="${icu4j.api.doc.title}"
                header="${icu4j.api.doc.header}"
                encoding="${java.src.encoding}"
                docencoding="UTF-8"
                charset="UTF-8"
                bottom="${icu4j.api.doc.copyright.footer}"
                additionalparam="${doclint.option} -breakiterator -use -tagletpath ${icu4j.build-tools.jar}${path.separator}${jcite.libs} -taglet com.ibm.icu.dev.tool.docs.ICUTaglet -taglet ch.arrenbrecht.jcite.JCiteTaglet -J-Djcitesourcepath=${jcite.addl.src} -J-Dfile.encoding=UTF-8"
                link="${icu4j.api.doc.jdk.link}"
                source="1.7"
                stylesheetfile="${docs.style.sheet}"
                failonerror="true">
            <packageset dir="${icu4j.core.dir}/src">
                <include name="com/ibm/icu/lang/**"/>
                <include name="com/ibm/icu/math/**"/>
                <include name="com/ibm/icu/number/**"/>
                <include name="com/ibm/icu/text/**"/>
                <include name="com/ibm/icu/util/**"/>
            </packageset>
            <packageset dir="${icu4j.collate.dir}/src">
                <include name="com/ibm/icu/text/**"/>
            </packageset>
            <packageset dir="${icu4j.translit.dir}/src">
                <include name="com/ibm/icu/text/**"/>
            </packageset>
            <packageset dir="${icu4j.charset.dir}/src">
                <include name="com/ibm/icu/charset/**"/>
            </packageset>
        </javadoc>
    </target>

    <target name="_docsWithoutJCite" depends="_docsStyleSheet, _docsLintOption" unless="jcite.libs">
        <echo message="Javadoc lint option:            ${doclint.option}"/>
        <javadoc
                destdir="${doc.dir}"
                nodeprecatedlist="true"
                windowtitle="${icu4j.api.doc.window.title}"
                doctitle="${icu4j.api.doc.title}"
                header="${icu4j.api.doc.header}"
                encoding="${java.src.encoding}"
                docencoding="UTF-8"
                charset="UTF-8"
                bottom="${icu4j.api.doc.copyright.footer}"
                additionalparam="${doclint.option} -breakiterator -use -tagletpath ${icu4j.build-tools.jar} -taglet com.ibm.icu.dev.tool.docs.ICUTaglet"
                link="${icu4j.api.doc.jdk.link}"
                source="1.7"
                failonerror="true">
            <packageset dir="${icu4j.core.dir}/src">
                <include name="com/ibm/icu/lang/**"/>
                <include name="com/ibm/icu/math/**"/>
                <include name="com/ibm/icu/number/**"/>
                <include name="com/ibm/icu/text/**"/>
                <include name="com/ibm/icu/util/**"/>
            </packageset>
            <packageset dir="${icu4j.collate.dir}/src">
                <include name="com/ibm/icu/text/**"/>
            </packageset>
            <packageset dir="${icu4j.translit.dir}/src">
                <include name="com/ibm/icu/text/**"/>
            </packageset>
            <packageset dir="${icu4j.charset.dir}/src">
                <include name="com/ibm/icu/charset/**"/>
            </packageset>
        </javadoc>
    </target>

    <!-- Component document targets, only used for Maven repository releases -->
    <target name="docsMaven" depends="info, build-tools, _checkJCite, _docsStyleSheet, _docsLintOption, _mavenIcu4jDoc, _mavenCharsetDoc, _mavenLocalespiDoc"
        description="Build API docs for each ICU4J maven artifact"/>

    <target name="_mavenIcu4jDoc">
        <fail message="JCite must be configured." unless="jcite.libs"/>
        <delete dir="${maven.doc.base.dir}/icu4j"/>

        <echo message="Javadoc lint option:            ${doclint.option}"/>
        <echo message="JCite library path:             ${jcite.libs}"/>
        <echo message="JCite additional source path:   ${jcite.addl.src}"/>
        <echo message="Custom stylesheet:              ${docs.style.sheet}"/>
        <javadoc
                destdir="${maven.doc.base.dir}/icu4j"
                nodeprecatedlist="true"
                windowtitle="${icu4j.main.api.doc.window.title}"
                doctitle="${icu4j.main.api.doc.title}"
                header="${icu4j.main.api.doc.header}"
                encoding="${java.src.encoding}"
                docencoding="UTF-8"
                charset="UTF-8"
                bottom="${icu4j.api.doc.copyright.footer}"
                additionalparam="${doclint.option} -breakiterator -use -tagletpath ${icu4j.build-tools.jar}${path.separator}${jcite.libs} -taglet com.ibm.icu.dev.tool.docs.ICUTaglet -taglet ch.arrenbrecht.jcite.JCiteTaglet -J-Djcitesourcepath=${jcite.addl.src} -J-Dfile.encoding=UTF-8"
                link="${icu4j.api.doc.jdk.link}"
                source="1.7"
                stylesheetfile="${docs.style.sheet}"
                failonerror="true">
            <packageset dir="${icu4j.core.dir}/src">
                <include name="com/ibm/icu/lang/**"/>
                <include name="com/ibm/icu/math/**"/>
                <include name="com/ibm/icu/number/**"/>
                <include name="com/ibm/icu/text/**"/>
                <include name="com/ibm/icu/util/**"/>
            </packageset>
            <packageset dir="${icu4j.collate.dir}/src">
                <include name="com/ibm/icu/text/**"/>
            </packageset>
            <packageset dir="${icu4j.translit.dir}/src">
                <include name="com/ibm/icu/text/**"/>
            </packageset>
        </javadoc>
    </target>

    <target name="_mavenCharsetDoc">
        <fail message="JCite must be configured." unless="jcite.libs"/>
        <delete dir="${maven.doc.base.dir}/charset"/>

        <echo message="Javadoc lint option:            ${doclint.option}"/>
        <echo message="JCite library path:             ${jcite.libs}"/>
        <echo message="JCite additional source path:   ${jcite.addl.src}"/>
        <echo message="Custom stylesheet:              ${docs.style.sheet}"/>
        <javadoc
                destdir="${maven.doc.base.dir}/charset"
                nodeprecatedlist="true"
                windowtitle="${icu4j.charset.api.doc.window.title}"
                doctitle="${icu4j.charset.api.doc.title}"
                header="${icu4j.charset.api.doc.header}"
                encoding="${java.src.encoding}"
                docencoding="UTF-8"
                charset="UTF-8"
                bottom="${icu4j.api.doc.copyright.footer}"
                additionalparam="${doclint.option} -breakiterator -use -tagletpath ${icu4j.build-tools.jar}${path.separator}${jcite.libs} -taglet com.ibm.icu.dev.tool.docs.ICUTaglet -taglet ch.arrenbrecht.jcite.JCiteTaglet -J-Djcitesourcepath=${jcite.addl.src} -J-Dfile.encoding=UTF-8"
                link="${icu4j.api.doc.jdk.link}"
                source="1.7"
                stylesheetfile="${docs.style.sheet}"
                failonerror="true"
                classpath="${icu4j.jar.file}">
            <packageset dir="${icu4j.charset.dir}/src">
                <include name="com/ibm/icu/charset/**"/>
            </packageset>
        </javadoc>
    </target>

    <target name="_mavenLocalespiDoc">
        <delete dir="${maven.doc.base.dir}/localespi"/>

        <echo message="Javadoc lint option:            ${doclint.option}"/>
        <echo message="Custom stylesheet:              ${docs.style.sheet}"/>
        <javadoc
                destdir="${maven.doc.base.dir}/localespi"
                nodeprecatedlist="true"
                windowtitle="${icu4j.localespi.api.doc.window.title}"
                doctitle="${icu4j.localespi.api.doc.title}"
                header="${icu4j.localespi.api.doc.header}"
                encoding="${java.src.encoding}"
                docencoding="UTF-8"
                charset="UTF-8"
                bottom="${icu4j.api.doc.copyright.footer}"
                additionalparam="${doclint.option} -breakiterator -use"
                link="${icu4j.api.doc.jdk.link}"
                source="1.7"
                failonerror="true"
                classpath="${icu4j.jar.file}">
            <packageset dir="${icu4j.localespi.dir}/src">
                <include name="com/ibm/icu/impl/javaspi"/>
            </packageset>
        </javadoc>

    </target>


    <!-- JaCoCo code coverage target -->
    <taskdef uri="antlib:org.jacoco.ant" resource="org/jacoco/ant/antlib.xml" onerror="ignore">
        <classpath path="${env.JACOCO_DIR}/lib/jacocoant.jar"/>
    </taskdef>

    <target name="coverageJaCoCo" depends="build-tools, jar, tests" description="Run the ICU4J unit tests and generate code coverage report">
        <property name="jacoco.out.dir" value="${out.dir}/jacoco"/>
        <property name="jacoco.exec.data.file" value="${jacoco.out.dir}/jacoco.exec"/>
        <property name="jacoco.report.html.zip" value="${jacoco.out.dir}/report_html.zip"/>
        <property name="jacoco.report.xml" value="${jacoco.out.dir}/report.xml"/>
        <property name="jacoco.report.csv" value="${jacoco.out.dir}/report.csv"/>
        <property name="jacoco.exclusion.txt" value="coverage-exclusion.txt"/>

        <delete dir="${jacoco.out.dir}"/>
        <mkdir dir="${jacoco.out.dir}"/>

        <!-- core -->
        <jacoco:coverage destfile="${jacoco.exec.data.file}">
            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no">
                <jvmarg value="-ea"/>
                <jvmarg value="-Djava.awt.headless=true"/>
                <classpath>
                    <path refid="junit.jars"/>
                    <path refid="junit.icu.jars"/>
                </classpath>

                <batchtest todir="${junit.out.dir}/core">
                    <fileset dir="${icu4j.core-tests.dir}/${bin.dir}">
                        <patternset refid="test-classes-patternset"/>
                    </fileset>
                </batchtest>
            </junit>
        </jacoco:coverage>

        <!-- charset -->
        <jacoco:coverage destfile="${jacoco.exec.data.file}">
            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no">
                <jvmarg value="-ea"/>
                <jvmarg value="-Djava.awt.headless=true"/>
                <classpath>
                    <path refid="junit.jars"/>
                    <path refid="junit.icu.jars"/>
                </classpath>

                <batchtest todir="${junit.out.dir}/charset">
                    <fileset dir="${icu4j.charset-tests.dir}/${bin.dir}">
                        <patternset refid="test-classes-patternset"/>
                    </fileset>
                </batchtest>
            </junit>
        </jacoco:coverage>

        <!-- collate -->
        <jacoco:coverage destfile="${jacoco.exec.data.file}">
            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no">
                <jvmarg value="-ea"/>
                <jvmarg value="-Djava.awt.headless=true"/>
                <classpath>
                    <path refid="junit.jars"/>
                    <path refid="junit.icu.jars"/>
                </classpath>

                <batchtest todir="${junit.out.dir}/collate">
                    <fileset dir="${icu4j.collate-tests.dir}/${bin.dir}">
                        <patternset refid="test-classes-patternset"/>
                    </fileset>
                </batchtest>
            </junit>
        </jacoco:coverage>

        <!-- translit -->
        <jacoco:coverage destfile="${jacoco.exec.data.file}">
            <junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no">
                <jvmarg value="-ea"/>
                <jvmarg value="-Djava.awt.headless=true"/>
                <classpath>
                    <path refid="junit.jars"/>
                    <path refid="junit.icu.jars"/>
                </classpath>

                <batchtest todir="${junit.out.dir}/translit">
                    <fileset dir="${icu4j.translit-tests.dir}/${bin.dir}">
                        <patternset refid="test-classes-patternset"/>
                    </fileset>
                </batchtest>
            </junit>
        </jacoco:coverage>

        <jacoco:report>
            <executiondata>
                <file file="${jacoco.exec.data.file}"/>
            </executiondata>

            <structure name="ICU4J Project">
                <classfiles>
                    <fileset dir=".">
                        <include name="${icu4j.jar.file}"/>
                        <include name="${icu4j-charset.jar.file}"/>
                    </fileset>
                </classfiles>
                <sourcefiles encoding="UTF-8">
                    <fileset dir="${icu4j.core.dir}/src"/>
                    <fileset dir="${icu4j.collate.dir}/src"/>
                    <fileset dir="${icu4j.currdata.dir}/src"/>
                    <fileset dir="${icu4j.langdata.dir}/src"/>
                    <fileset dir="${icu4j.regiondata.dir}/src"/>
                    <fileset dir="${icu4j.translit.dir}/src"/>

                    <fileset dir="${icu4j.charset.dir}/src"/>
                </sourcefiles>
            </structure>

            <html destfile="${jacoco.report.html.zip}"/>
            <xml destfile="${jacoco.report.xml}"/>
            <csv destfile="${jacoco.report.csv}"/>
        </jacoco:report>

        <java classname="com.ibm.icu.dev.tool.coverage.JacocoReportCheck" failonerror="true">
            <arg line="${jacoco.report.xml}  ${jacoco.exclusion.txt}"/>
            <classpath>
                <pathelement location="${icu4j.build-tools.jar}"/>
            </classpath>
        </java>

    </target>

    <!-- Release management targets -->
    <target name="checktags" depends="info, build-tools" description="Check API tags before release">
        <javadoc source="1.7"
                 bootclasspath="${java7.bootclasspath}"
                 encoding="${java.src.encoding}">
            <packageset dir="${icu4j.core.dir}/src">
                <include name="com/ibm/icu/lang/**"/>
                <include name="com/ibm/icu/math/**"/>
                <include name="com/ibm/icu/number/**"/>
                <include name="com/ibm/icu/text/**"/>
                <include name="com/ibm/icu/util/**"/>
            </packageset>
            <packageset dir="${icu4j.collate.dir}/src">
                <include name="com/ibm/icu/**"/>
            </packageset>
            <packageset dir="${icu4j.charset.dir}/src">
                <include name="com/ibm/icu/charset/**"/>
            </packageset>
            <doclet name="com.ibm.icu.dev.tool.docs.CheckTags" path="${icu4j.build-tools.jar}"/>
        </javadoc>
    </target>

    <target name="gatherapi" depends="info, build-tools" description="Run API database generator tool">
        <mkdir dir="${out.dir}"/>
        <javadoc source="1.7"
                 bootclasspath="${java7.bootclasspath}"
                 encoding="${java.src.encoding}">
            <packageset dir="${icu4j.core.dir}/src">
                <include name="com/ibm/icu/lang/**"/>
                <include name="com/ibm/icu/math/**"/>
                <include name="com/ibm/icu/number/**"/>
                <include name="com/ibm/icu/text/**"/>
                <include name="com/ibm/icu/util/**"/>
            </packageset>
            <packageset dir="${icu4j.collate.dir}/src">
                <include name="com/ibm/icu/text/**"/>
                <include name="com/ibm/icu/util/**"/>
            </packageset>
            <packageset dir="${icu4j.charset.dir}/src">
                <include name="com/ibm/icu/charset/**"/>
            </packageset>
            <packageset dir="${icu4j.translit.dir}/src">
                <include name="com/ibm/icu/text/**"/>
            </packageset>
            <doclet name="com.ibm.icu.dev.tool.docs.GatherAPIData" path="${icu4j.build-tools.jar}">
                <param name="-name" value="ICU4J ${icu4j.impl.version}"/>
                <param name="-output" value="${out.dir}/icu4j${api.report.version}.api3"/>
                <param name="-internal"/>
                <param name="-version"/>
                <param name="-gzip"/>
            </doclet>
        </javadoc>
    </target>

    <target name="apireport" depends="info, gatherapi" description="Run API report generator tool">
        <java classname="com.ibm.icu.dev.tool.docs.ReportAPI"
                classpath="${icu4j.build-tools.jar}"
                failonerror="true">
            <arg value="-old:" />
            <arg value="${icu4j.build-tools.dir}/icu4j${api.report.prev.version}.api3.gz" />
            <arg value="-new:" />
            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
            <arg value="-html" />
            <arg value="-out:" />
            <arg value="${out.dir}/icu4j_compare_${api.report.prev.version}_${api.report.version}.html" />
        </java>
    </target>

    <target name="gatherapiOld" depends="info, build-tools" description="Run API database generator tool (Pre Java 5 style)">
        <mkdir dir="${out.dir}"/>
        <javadoc source="1.7"
                 bootclasspath="${java7.bootclasspath}"
                 encoding="${java.src.encoding}">
            <packageset dir="${icu4j.core.dir}/src">
                <include name="com/ibm/icu/lang/**"/>
                <include name="com/ibm/icu/math/**"/>
                <include name="com/ibm/icu/number/**"/>
                <include name="com/ibm/icu/text/**"/>
                <include name="com/ibm/icu/util/**"/>
            </packageset>
            <packageset dir="${icu4j.collate.dir}/src">
                <include name="com/ibm/icu/text/**"/>
                <include name="com/ibm/icu/util/**"/>
            </packageset>
            <packageset dir="${icu4j.charset.dir}/src">
                <include name="com/ibm/icu/charset/**"/>
            </packageset>
            <packageset dir="${icu4j.translit.dir}/src">
                <include name="com/ibm/icu/text/**"/>
            </packageset>
            <doclet name="com.ibm.icu.dev.tool.docs.GatherAPIDataOld" path="${icu4j.build-tools.jar}">
                <param name="-name" value="ICU4J ${icu4j.impl.version}"/>
                <param name="-output" value="${out.dir}/icu4j${api.report.version}.api"/>
                <param name="-internal"/>
                <param name="-gzip"/>
            </doclet>
        </javadoc>
    </target>

    <target name="apireportOld" depends="info, gatherapiOld" description="Run API report generator tool (Pre Java 5 Style)">
        <java classname="com.ibm.icu.dev.tool.docs.ReportAPI"
                classpath="${icu4j.build-tools.jar}"
                failonerror="true">
            <arg value="-old:" />
            <arg value="${icu4j.build-tools.dir}/icu4j${api.report.prev.version}.api.gz" />
            <arg value="-new:" />
            <arg value="${out.dir}/icu4j${api.report.version}.api.gz" />
            <arg value="-html" />
            <arg value="-internal" />
            <arg value="-out:" />
            <arg value="${out.dir}/icu4j_compare_${api.report.prev.version}_${api.report.version}.html" />
        </java>
    </target>

    <target name="checkDeprecated" depends="info, build-tools, gatherapi, main"
        description="Check consistency between javadoc @deprecated and @Deprecated annotation">
        <java classname="com.ibm.icu.dev.tool.docs.DeprecatedAPIChecker"
                failonerror="true">
            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
            <classpath>
                <pathelement location="${icu4j.build-tools.jar}"/>
                <pathelement location="${icu4j.core.jar}"/>
                <pathelement location="${icu4j.collate.jar}"/>
                <pathelement location="${icu4j.charset.jar}"/>
                <pathelement location="${icu4j.currdata.jar}"/>
                <pathelement location="${icu4j.langdata.jar}"/>
                <pathelement location="${icu4j.regiondata.jar}"/>
                <pathelement location="${icu4j.translit.jar}"/>
            </classpath>
        </java>
    </target>

    <target name="checkAPIStatusConsistency" depends="info, build-tools, gatherapi"
        description="Check consistency between API class status and methods overriding java.lang.Object">
        <!--
            If you need classes excluded from this check, define followig property in build-local.properties.
            e.g. checkAPIStatusConsistency.skip.classes=com.ibm.icu.text.Normalizer;com.ibm.icu.util.ULocale
        -->
        <property name="checkAPIStatusConsistency.skip.classes" value=""/>
        <java classname="com.ibm.icu.dev.tool.docs.APIStatusConsistencyChecker"
                failonerror="true">
            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
            <arg value="${checkAPIStatusConsistency.skip.classes}" />
            <classpath>
                <pathelement location="${icu4j.build-tools.jar}"/>
                <pathelement location="${icu4j.core.jar}"/>
                <pathelement location="${icu4j.collate.jar}"/>
                <pathelement location="${icu4j.charset.jar}"/>
                <pathelement location="${icu4j.currdata.jar}"/>
                <pathelement location="${icu4j.langdata.jar}"/>
                <pathelement location="${icu4j.regiondata.jar}"/>
                <pathelement location="${icu4j.translit.jar}"/>
            </classpath>
        </java>
    </target>

    <target name="checkAPIStatus" depends="checkAPIStatusConsistency, checkDeprecated"/>

    <target name="draftAPIs" depends="info, gatherapi" description="Run API collector tool and generate draft API report in html">
        <java classname="com.ibm.icu.dev.tool.docs.CollectAPI"
                classpath="${icu4j.build-tools.jar}"
                failonerror="true">
            <arg value="-f"/>
            <arg value="Draft"/>
            <arg value="-o"/>
            <arg value="${out.dir}/draftAPIs.html"/>
            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
        </java>
    </target>

    <target name="draftAPIsTSV" depends="info, gatherapi" description="Run API collector tool and generate draft API report in TSV">
        <java classname="com.ibm.icu.dev.tool.docs.CollectAPI"
                classpath="${icu4j.build-tools.jar}"
                failonerror="true">
            <arg value="-f"/>
            <arg value="Draft"/>
            <arg value="-o"/>
            <arg value="${out.dir}/draftAPIs.tsv"/>
            <arg value="-t"/>
            <arg value="${out.dir}/icu4j${api.report.version}.api3.gz" />
        </java>
    </target>

    <target name="swatDeprecated" depends="build-tools" description="Convert @deprecated @draft tags to @provisional">
        <antcall target="_runSwatDeprecated">
            <param name="swat.deprecated.opt" value="-dep"/>
        </antcall>
    </target>

    <target name="swatProvisional" depends="build-tools" description="Convert @provisional tags to @deprecated @draft">
        <antcall target="_runSwatDeprecated">
            <param name="swat.deprecated.opt" value="-prov"/>
        </antcall>
    </target>

    <target name="_runSwatDeprecated">
        <java classname="com.ibm.icu.dev.tool.docs.SwatDeprecated"
                classpath="${icu4j.build-tools.jar}"
                failonerror="true">
            <arg value="${swat.deprecated.opt}"/>
            <arg value="-src"/>
            <arg value="${icu4j.core.dir}/src"/>
            <arg value="-dst"/>
            <arg value="${icu4j.core.dir}/src"/>
            <arg value="-overwrite"/>
            <arg value="-verbose"/>
        </java>
        <java classname="com.ibm.icu.dev.tool.docs.SwatDeprecated"
                classpath="${icu4j.build-tools.jar}"
                failonerror="true">
            <arg value="${swat.deprecated.opt}"/>
            <arg value="-src"/>
            <arg value="${icu4j.charset.dir}/src"/>
            <arg value="-dst"/>
            <arg value="${icu4j.charset.dir}/src"/>
            <arg value="-overwrite"/>
            <arg value="-verbose"/>
        </java>
    </target>

    <target name="serialTestData" depends="main, tests">
        <property name="serial.test.data.dir" value="${out.dir}/serialTestData"/>
        <delete dir="${serial.test.data.dir}"/>
        <mkdir dir="${serial.test.data.dir}"/>
        <java classname="com.ibm.icu.dev.test.serializable.SerializableWriter" fork="yes" failonerror="true">
            <arg line="${serial.test.data.dir}"/>
            <classpath>
                <pathelement location="${icu4j.core.jar}"/>
                <pathelement location="${icu4j.collate.jar}"/>
                <pathelement location="${icu4j.charset.jar}"/>
                <pathelement location="${icu4j.currdata.jar}"/>
                <pathelement location="${icu4j.langdata.jar}"/>
                <pathelement location="${icu4j.regiondata.jar}"/>
                <pathelement location="${icu4j.translit.jar}"/>
                <pathelement location="${icu4j.test-framework.jar}"/>
                <pathelement location="${icu4j.core-tests.jar}"/>
            </classpath>
        </java>
        <echo message="Note: The serialization compatibility test data files were"/>
        <echo message="created in ${serial.test.data.dir}. Once you confirm"/>
        <echo message="the test runs clean, you should copy the data file directory to"/>
        <echo message="main/tests/core/src/com/ibm/icu/dev/test/serializable/data."/>
    </target>

    <!-- Special packaging targets -->
    <target name="translitIMEJar" depends="info" description="Build transliterator IME 'icutransime.jar' jar file">
        <property name="translit.ime.out.dir" value="${out.dir}/translit_ime"/>

        <mkdir dir="${translit.ime.out.dir}/bin"/>
        <javac destdir="${translit.ime.out.dir}/bin"
                source="${javac.source}"
                target="${javac.target}"
                encoding="${java.src.encoding}"
                debug="on" deprecation="off">
            <src path="${icu4j.core.dir}/src"/>
            <src path="${icu4j.translit.dir}/src"/>
            <src path="${icu4j.tools.dir}/src"/>
            <include name="com/ibm/icu/dev/tool/ime/translit/*.java"/>
        </javac>

        <copy file="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/translit/Transliterator.properties"
                todir="${translit.ime.out.dir}/bin/com/ibm/icu/dev/tool/ime/translit"/>

        <mkdir dir="${translit.ime.out.dir}/lib"/>
        <jar jarfile="${translit.ime.out.dir}/lib/icutransime.jar"
                compress="true"
                basedir="${translit.ime.out.dir}/bin"
                includes="com/ibm/icu/dev/tool/ime/translit/**/*"
                manifest="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/translit/manifest.stub">
            <metainf dir="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/translit" includes="services/*" />
        </jar>
    </target>

    <target name="indicIMEJar" depends="info" description="Build indic IME 'icuindicime.jar' jar file">
        <property name="indic.ime.out.dir" value="${out.dir}/indic_ime"/>

        <mkdir dir="${indic.ime.out.dir}/bin"/>
        <javac destdir="${indic.ime.out.dir}/bin"
                source="${javac.source}"
                target="${javac.target}"
                encoding="${java.src.encoding}"
                debug="on" deprecation="off">
            <src path="${icu4j.core.dir}/src"/>
            <src path="${icu4j.tools.dir}/src"/>
            <include name="com/ibm/icu/dev/tool/ime/indic/*.java"/>
        </javac>

        <copy file="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/indic/DisplayNames.properties"
                todir="${indic.ime.out.dir}/bin/com/ibm/icu/dev/tool/ime/indic"/>

        <mkdir dir="${indic.ime.out.dir}/lib"/>
        <jar jarfile="${indic.ime.out.dir}/lib/icuindicime.jar"
                compress="true"
                basedir="${indic.ime.out.dir}/bin"
                includes="com/ibm/icu/dev/tool/ime/indic/**/*"
                manifest="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/indic/manifest.stub">
            <metainf dir="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/ime/indic" includes="services/*" />
        </jar>
    </target>

    <target name="cldrUtil" depends="icu4jJar" description="Build Utilities for CLDR tooling">
        <mkdir dir="${cldr.util.out.dir}/bin"/>
        <javac destdir="${cldr.util.out.dir}/bin"
                source="${javac.source}"
                target="${javac.target}"
                encoding="${java.src.encoding}"
                debug="on" deprecation="off"
                classpath="${icu4j.jar.file}">

            <src path="${icu4j.tools.dir}/src"/>
            <src path="${icu4j.test-framework.dir}/src"/>

            <include name="com/ibm/icu/dev/util/CollectionUtilities.java" />
            <include name="com/ibm/icu/dev/util/ElapsedTimer.java" />
            <include name="com/ibm/icu/dev/util/UnicodeMap.java" />
            <include name="com/ibm/icu/dev/util/UnicodeMapIterator.java" />
            <include name="com/ibm/icu/dev/tool/UOption.java" />
        </javac>

        <mkdir dir="${cldr.util.out.dir}/lib"/>
        <jar jarfile="${cldr.util.out.dir}/lib/utilities.jar"
                compress="true"
                basedir="${cldr.util.out.dir}/bin">
            <include name="com/ibm/icu/dev/util/*.class"/>
            <include name="com/ibm/icu/dev/tool/UOption*.class"/>
        </jar>
    </target>

    <target name="releaseCLDR" depends="icu4jJar,icu4jSrcJar,cldrUtil" description="Build release files for CLDR tooling">
        <mkdir dir="${cldr.release.dir}"/>
        <!-- icu4j.jar -->
        <copy file="${icu4j.jar.file}" todir="${cldr.release.dir}"/>
        <!-- icu4j-src.jar -->
        <copy file="${icu4j-src.jar.file}" todir="${cldr.release.dir}"/>
        <!-- utilities.jar -->
        <copy file="${cldr.util.out.dir}/lib/utilities.jar" todir="${cldr.release.dir}"/>
        <!-- utilities-src.jar -->
        <jar jarfile="${cldr.release.dir}/utilities-src.jar" compress="true">
            <fileset dir="${icu4j.test-framework.dir}/${src.dir}">
                <include name="com/ibm/icu/dev/util/CollectionUtilities.java" />
                <include name="com/ibm/icu/dev/util/ElapsedTimer.java" />
                <include name="com/ibm/icu/dev/util/UnicodeMap.java" />
                <include name="com/ibm/icu/dev/util/UnicodeMapIterator.java" />
            </fileset>
            <fileset dir="${icu4j.tools.dir}/${src.dir}" includes="com/ibm/icu/dev/tool/UOption.java"/>
       </jar>
    </target>

    <target name="xliff" description="Build xliff converter tool">
        <property name="xliff.out.dir" value="${out.dir}/xliff"/>

        <mkdir dir="${xliff.out.dir}/bin"/>
        <javac destdir="${xliff.out.dir}/bin"
                source="1.3"
                target="1.3"
                encoding="${java.src.encoding}"
                debug="on" deprecation="off">
            <src path="${icu4j.tools.dir}/src"/>
            <include name="com/ibm/icu/dev/tool/localeconverter/CalculateCRC32.java"/>
            <include name="com/ibm/icu/dev/tool/localeconverter/XLIFF2ICUConverter.java"/>
            <include name="com/ibm/icu/dev/tool/UOption.java"/>
       </javac>

        <mkdir dir="${xliff.out.dir}/lib"/>

        <jar jarfile="${xliff.out.dir}/lib/xliff-src.jar"
                compress="true"
                basedir="${icu4j.tools.dir}/src">
            <include name="com/ibm/icu/dev/tool/localeconverter/CalculateCRC32.java"/>
            <include name="com/ibm/icu/dev/tool/localeconverter/XLIFF2ICUConverter.java"/>
            <include name="com/ibm/icu/dev/tool/UOption.java"/>
        </jar>

        <jar jarfile="${xliff.out.dir}/lib/xliff.jar"
                compress="true"
                basedir="${xliff.out.dir}/bin"
                manifest="${icu4j.tools.dir}/src/com/ibm/icu/dev/tool/localeconverter/manifest.stub"/>
    </target>
</project>
