blob: 4ccf4a29cb3aaff57a912b67f88b862426515158 [file] [log] [blame]
<!--
* © 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:jacoco="antlib:org.jacoco.ant"
xmlns:ivy="antlib:org.apache.ivy.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/"/>
<!-- directories -->
<property name="release.dir" value="release"/>
<property name="doc.dir" value="doc"/>
<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.java6.plus">
<or>
<contains string="${java.version}" substring="1.6."/>
<contains string="${java.version}" substring="1.7."/>
<contains string="${java.version}" substring="1.8."/>
<contains string="${java.version}" substring="1.9."/>
</or>
</condition>
<fail message="The JDK version is too old or unknown.">
<condition>
<not>
<isset property="is.java6.plus"/>
</not>
</condition>
</fail>
<condition property="is.java6">
<contains string="${java.version}" substring="1.6."/>
</condition>
<condition property="is.java7">
<contains string="${java.version}" substring="1.7."/>
</condition>
<condition property="is.java8">
<contains string="${java.version}" substring="1.8."/>
</condition>
<condition property="is.java9">
<contains string="${java.version}" substring="1.9."/>
</condition>
<condition property="is.java7.plus">
<or>
<isset property="is.java7"/>
<isset property="is.java8"/>
<isset property="is.java9"/>
</or>
</condition>
<condition property="is.java8.plus">
<or>
<isset property="is.java8"/>
<isset property="is.java9"/>
</or>
</condition>
<!-- 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."/>
<!-- Junit Targets -->
<macrodef name="icu-junit">
<attribute name="testdir"/>
<attribute name="output"/>
<attribute name="jvm-options" default=""/>
<attribute name="test-patternset" default="test-classes-patternset"/>
<attribute name="classpath" default="junit.icu.jars"/>
<attribute name="failure-status" default="ignore"/>
<element name="junit-parameters" optional="true"/>
<sequential>
<!--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}/@{output}"/>
<mkdir dir="${junit.out.dir}/@{output}"/>
<junit fork="yes" forkmode="once" printsummary="yes" haltonfailure="no" failureproperty="@{failure-status}">
<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}/@{output}">
<fileset dir="@{testdir}/${bin.dir}">
<patternset refid="@{test-patternset}"/>
</fileset>
</batchtest>
</junit>
<junitreport tofile="@{output}-TestSuite.xml" todir="${junit.out.dir}/@{output}">
<fileset dir="${junit.out.dir}/@{output}">
<include name="*.xml"/>
</fileset>
<report format="frames" todir="${junit.out.dir}/@{output}/html"/>
</junitreport>
<fail message="test failed: @{testdir}" 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.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>
<!--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="**/*TestCase*"/>
<exclude name="**/*TestData*"/>
<exclude name="**/*TestSample*"/>
<exclude name="**/*$*.class"/>
<exclude name="**/data/**"/>
</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">
<antcall target="_charsetCheck"/>
<antcall target="_collateCheck"/>
<antcall target="_coreCheck"/>
<antcall target="_translitCheck"/>
</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="timeZoneCheck" description="Run the complete test for TimeZoneRoundTripAll">
<icu-junit
testdir="${icu4j.core-tests.dir}" output="timeZoneCheck"
test-patternset="timeZoneCheck-patternset"
jvm-options="-DTimeZoneRoundTripAll=true"
failure-status="icu-junit-failure"
/>
<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 testdir="${icu4j.packaging-tests.dir}" output="packaging/NoLangData"
test-patternset="packagingCheck-patternset"
classpath="junit.icu.jars.PackagingCheckNoLangData"
failure-status="icu-junit-failure"
/>
</target>
<target name="_packagingCheckNoRegionData">
<!-- language data but no region data -->
<icu-junit testdir="${icu4j.packaging-tests.dir}" output="packaging/NoRegionData"
test-patternset="packagingCheck-patternset"
classpath="junit.icu.jars.PackagingCheckNoRegionData"
failure-status="icu-junit-failure"
/>
</target>
<target name="_packagingCheckNoLangNorRegionData">
<!-- neither region nor language data -->
<icu-junit testdir="${icu4j.packaging-tests.dir}" output="packaging/NoLangNorRegionData"
test-patternset="packagingCheck-patternset"
classpath="junit.icu.jars.PackagingCheckNoLangNorRegionData"
failure-status="icu-junit-failure"
/>
</target>
<target name="packagingCheck" depends="info, core, 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 testdir="${icu4j.core-tests.dir}" output="core"
failure-status="icu-junit-failure"
/>
</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 testdir="${icu4j.charset-tests.dir}" output="charset"
failure-status="icu-junit-failure"
/>
</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 testdir="${icu4j.collate-tests.dir}" output="collate"
failure-status="icu-junit-failure"
/>
</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 testdir="${icu4j.translit-tests.dir}" output="translit"
failure-status="icu-junit-failure"
/>
</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 testdir="${icu4j.localespi-tests.dir}" output="localespi"
test-patternset="localespiCheck-patternset"
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"
/>
</target>
<target name="localespiCheck" if="is.java6.plus" 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" description="Run the secure (applet-like) ICU4J test suite">
<antcall target="check">
<param name="internal-jvm-options" value="-DICU.securitypolicy=${shared.dir}/data/security.policy"/>
</antcall>
</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" 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="**/*"/>
</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="java6.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.java6.bootclasspath" value="${java6.bootclasspath}" else="Not Defined!">
<isset property="java6.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 Tools Version: ${disp.is.java8}"/>
<echo message="JRE 6 System Library Path: ${disp.java6.bootclasspath}"/>
<echo message="JCite Library Path: ${disp.jcite.libs}"/>
<echo message="################################################################"/>
</target>
<target name="releaseVer" depends="info, releaseBinaries, 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="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" if="is.java6.plus" description="Build Locale SPI classes">
<antcall target="_build-localespi"/>
</target>
<target name="_build-localespi" depends="core, collate, currdata, langdata, regiondata">
<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" 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" if="is.java6.plus" description="Build Locale SPI tests">
<antcall target="_build-localespi-tests"/>
</target>
<target name="_build-localespi-tests" depends="localespi, test-framework">
<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, core-tests, collate, translit, translit-tests" description="Build tool classes">
<ant dir="${icu4j.tools.dir}" inheritAll="false"/>
</target>
<target name="perf-tests" if="is.java6.plus" 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="stylesheet6.css">
<isset property="is.java6"/>
</condition>
<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="&lt;font size=-1&gt;Copyright (c) ${current.year} IBM Corporation and others.&lt;/font&gt;"
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.5"
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/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="&lt;font size=-1&gt;Copyright (c) ${current.year} IBM Corporation and others.&lt;/font&gt;"
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.5"
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/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>
<!-- 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>
<!-- Clover code coverage target -->
<property name="clover.out.dir" value="${out.dir}/clover"/>
<property name="clover.jar" location="${env.CLOVER_DIR}/clover.jar"/>
<taskdef resource="cloverlib.xml" classpath="${clover.jar}" onerror="ignore"/>
<target name="codeCoverage" depends="clean" description="Generate code coverage report with clover">
<!-- Set up clover -->
<mkdir dir="${clover.out.dir}"/>
<clover-setup initstring="${clover.out.dir}/clover.db">
<files>
<exclude name="**/dev/**/*.java"/>
</files>
<methodContext name="API" regexp="(.* )?public .*"/>
</clover-setup>
<!-- Build components with clover instrumentation -->
<ant dir="${icu4j.core.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.collate.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.charset.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.currdata.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.langdata.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.regiondata.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.translit.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.test-framework.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.core-tests.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.collate-tests.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.charset-tests.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<ant dir="${icu4j.translit-tests.dir}" inheritAll="false" inheritRefs="true">
<property name="build.compiler" value="${build.compiler}"/>
</ant>
<!-- Run the test suites -->
<java classname="com.ibm.icu.dev.test.TestAll" fork="yes" failonerror="true">
<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}"/>
<pathelement location="${icu4j.collate-tests.jar}"/>
<pathelement location="${icu4j.charset-tests.jar}"/>
<pathelement location="${icu4j.translit-tests.jar}"/>
<pathelement location="${icu4j.testall.jar}"/>
<pathelement location="${clover.jar}"/>
</classpath>
</java>
<!-- Generate HTML coverage report -->
<!-- <clover-html-report outdir="${clover.out.dir}/html" title="ICU4J Code Coverage"/> -->
<clover-report>
<current outfile="${clover.out.dir}/html" title="ICU4J Code Coverage">
<format type="html" filter="assert" />
</current>
</clover-report>
</target>
<!-- Release management targets -->
<target name="checktags" depends="info, build-tools" description="Check API tags before release">
<javadoc source="1.6"
bootclasspath="${java6.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/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.6"
bootclasspath="${java6.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/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.6"
bootclasspath="${java6.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/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="draftAPIs" depends="info, gatherapi" description="Run API collector tool and generate draft API report">
<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="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.translit-tests.dir}/src"/>
<src path="${icu4j.test-framework.dir}/src"/>
<include name="com/ibm/icu/dev/test/TestFmwk.java" />
<include name="com/ibm/icu/dev/util/*.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/test/*.class"/>
<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/test/TestFmwk.java"/>
<include name="com/ibm/icu/dev/test/*Log*.java"/>
<include name="com/ibm/icu/dev/test/TestUtil.java"/>
<include name="com/ibm/icu/dev/test/UTF16Util.java"/>
</fileset>
<fileset dir="${icu4j.test-framework.dir}/${src.dir}" includes="com/ibm/icu/dev/util/*.java"/>
<fileset dir="${icu4j.translit-tests.dir}/${src.dir}" includes="com/ibm/icu/dev/util/*.java"/>
<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>
<target name="publishToMavenRepo" depends="releaseVer">
<!--
Publish libraries to Maven repositories, snapshot or release depending on current
version in pom.xml.
Prerequisites
1) Apache Maven Ant tasks - http://maven.apache.org/ant-tasks
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
gpg.passphrase = [passprase for ICU Project's PGP key]
4) Maven configuration file ~/.m2/settings.xml
<settings>
<servers>
<server>
<id>icu4j-releases</id>
<username>[your JIRA/Nexus ID]</username>
<password>[your JIRA/Nexus password]</password>
</server>
<server>
<id>icu4j-snapshots</id>
<username>[your JIRA/Nexus ID]</username>
<password>[your JIRA/Nexus password]</password>
</server>
</servers>
</settings>
Note: For now, charset.jar and localespi.jar are excluded.
-->
<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"/>
<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"/>
<xmlproperty file="pom.xml" prefix="pom.xml"/>
<!-- copy release files -->
<property name="maven.release.dir" value="${release.dir}/maven"/>
<property name="maven.icu4j.jar.versioned.file" value="icu4j-${pom.xml.project.version}.jar"/>
<property name="maven.icu4j-src.jar.versioned.file" value="icu4j-${pom.xml.project.version}-src.jar"/>
<property name="maven.icu4jdocs.jar.file" value="icu4j-${pom.xml.project.version}-javadoc.jar"/>
<mkdir dir="${maven.release.dir}"/>
<copy file="${release.dir}/${icu4j.jar.versioned.file}" tofile="${maven.release.dir}/${maven.icu4j.jar.versioned.file}"/>
<copy file="${release.dir}/${icu4j-src.jar.versioned.file}" tofile="${maven.release.dir}/${maven.icu4j-src.jar.versioned.file}"/>
<copy file="${release.dir}/${icu4jdocs.jar.versioned.file}" tofile="${maven.release.dir}/${maven.icu4jdocs.jar.file}"/>
<copy file="pom.xml" todir="${maven.release.dir}"/>
<!-- 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="--passphrase"/>
<arg value="${gpg.passphrase}"/>
<arg value="-o"/>
<arg value="@{file}.asc"/>
<arg value="@{file}"/>
</exec>
</sequential>
</macrodef>
<gpg file="${maven.release.dir}/${maven.icu4j.jar.versioned.file}"/>
<gpg file="${maven.release.dir}/${maven.icu4j-src.jar.versioned.file}"/>
<gpg file="${maven.release.dir}/${maven.icu4jdocs.jar.file}"/>
<gpg file="${maven.release.dir}/pom.xml"/>
<!-- deploy files to the repository -->
<deploy xmlns="urn:maven-artifact-ant" file="${maven.release.dir}/${maven.icu4j.jar.versioned.file}">
<pom file="${maven.release.dir}/pom.xml"/>
<attach file="${maven.release.dir}/pom.xml.asc" type="pom.asc"/>
<attach file="${maven.release.dir}/${maven.icu4j.jar.versioned.file}.asc" type="jar.asc"/>
<attach file="${maven.release.dir}/${maven.icu4j-src.jar.versioned.file}" classifier="sources"/>
<attach file="${maven.release.dir}/${maven.icu4j-src.jar.versioned.file}.asc" classifier="sources" type="jar.asc"/>
<attach file="${maven.release.dir}/${maven.icu4jdocs.jar.file}" classifier="javadoc"/>
<attach file="${maven.release.dir}/${maven.icu4jdocs.jar.file}.asc" classifier="javadoc" type="jar.asc"/>
</deploy>
<antcall target="_verify_config_for_release"/>
</target>
</project>